Доля констант между PHP и JavaScript

Возможный дубликат:
Передайте строку PHP переменной Javascript (и удалите строки перевода)

У меня есть несколько констант в приложении PHP, которое я разрабатываю. Я определил класс Constants и определил константы как const VAR_NAME = значение; в этом классе. Я хотел бы поделиться этими константами между моим JavaScript и PHP-кодом. Есть ли механизм DRY (Do not Repeat Yourself) для их совместного использования?

class Constants {
    const RESOURCE_TYPE_REGSITER = 2;
    const RESOURCE_TYPE_INFO = 1;
}

Ответ 1

Я бы использовал json_encode. Сначала вам нужно преобразовать класс в ассоциативный массив.

$constants = array("RESOURCE_TYPE_REGISTER"=>2, "RESOURCE_TYPE_INFO"=>2);
echo json_encode($constants);

Вы также можете использовать отражение, чтобы преобразовать класс в ассоциативный массив, если вы предпочитаете использовать класс.

function get_class_consts($class_name)
{
    $c = new ReflectionClass($class_name);
    return ($c->getConstants());
}

class Constants {
    const RESOURCE_TYPE_REGSITER = 2;
    const RESOURCE_TYPE_INFO = 1;
}

echo json_encode(get_class_consts("Constants"));

Ответ 2

Поместите список констант, общих для JavaScript и PHP, в "client_server_shared.js".

'var' требуется в JavaScript и является законным (хотя и устаревшим) в PHP, если внутри класса. '$', чтобы начать имя переменной, требуется в PHP и легально в JavaScript.

var $shared_CONSTANT1 = 100;
var $shared_CONSTANT2 = 'hey';

Код PHP:

eval('class Client_server_shared{'                   ."\n"
.     file_get_contents( 'client_server_shared.js' ) ."\n"
.    '}'
.    '$client_server = new Client_server_shared();'
);

echo $client_server->shared_CONSTANT1;   // Proof it works in PHP.
echo $client_server->shared_CONSTANT2;

Код JavaScript:

alert( $shared_CONSTANT1 );              // Proof it works in JavaScript.
alert( $shared_CONSTANT2 );

Ответ 3

Единственный способ, которым вы можете поделиться константами, - это указать стороне php javascript. Например:

echo "<script> var CONSTANT1 =".$constant_instance->CONSTANT_NAME.";</script>";

Или используя ajax, вы также можете написать небольшой script, который вернет константы как JSON/что угодно.

Ответ 4

Немного уродливого взлома, но здесь он идет:

constants.js

//<?php
$const1 = 42;
$const2 = "Hello";
//?>

constants.html (используйте внутри JavaScript)

<script type="text/javascript" src="constants.js"></script>
<script type="text/javascript">document.write($const1);</script>

constants.php (используйте внутри PHP)

<?php
ob_start(); // start buffering the "//"
require "constants.js";
ob_end_clean(); // discard the buffered "//"

echo $const1;
?>