Возможный дубликат:
Передайте строку PHP переменной Javascript (и избегайте новых строк)
У меня есть несколько констант в приложении PHP, которое я разрабатываю. Я определил класс Constants и определил константы как const VAR_NAME = значение; в этом классе. Я хотел бы поделиться этими константами между моим JavaScript и PHP-кодом. Есть ли механизм СУХОЙ (не повторять сам), чтобы делиться ими?
class Constants { const RESOURCE_TYPE_REGSITER = 2; const RESOURCE_TYPE_INFO = 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"));
Поместите список констант, общих для 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 );
Единственный способ, которым вы можете поделиться константами, – это указать стороне php javascript. Например:
echo "<script> var CONSTANT1 =".$constant_instance->CONSTANT_NAME.";</script>";
Или используя ajax, вы также можете написать небольшой скрипт, который вернет константы как JSON / что угодно.
Немного уродливого взлома, но вот он идет:
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; ?>