在PHP和JavaScript之间共享常量

时间:2009-01-13 19:45:00

标签: php javascript code-generation dry

  

可能重复:
  Pass a PHP string to a Javascript variable (and escape newlines)

我正在开发的PHP应用程序中有几个常量。我已经定义了一个Constants类,并将常量定义为const VAR_NAME = value;在这堂课上。我想在JavaScript和PHP代码之间共享这些常量。是否有干(不要重复自己)机制来分享它们?

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

4 个答案:

答案 0 :(得分:8)

我会使用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"));

答案 1 :(得分:2)

在“client_server_shared.js”中列出JavaScript和PHP共有的常量列表。

JavaScript中需要

'var',如果在类中,则在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 );

答案 2 :(得分:-1)

你可以分享常量的唯一方法是让php端通知javascript。例如:

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

或者使用ajax,你也可以编写一个小脚本,将常量作为JSON /返回。

答案 3 :(得分:-2)

有点丑陋的黑客,但在这里:

<强> 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;
?>