Доля констант между 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;
?>