我正在开发的 PHP 应用程序中有几个常量。我定义了一个常量类,并将常量定义为 const VAR_NAME = value; 在这堂课中。我想在我的 JavaScript 和 PHP 代码之间共享这些常量。是否有一个 DRY(不要重复自己)机制来分享它们?
class Constants {
const RESOURCE_TYPE_REGSITER = 2;
const RESOURCE_TYPE_INFO = 1;
}
我正在开发的 PHP 应用程序中有几个常量。我定义了一个常量类,并将常量定义为 const VAR_NAME = value; 在这堂课中。我想在我的 JavaScript 和 PHP 代码之间共享这些常量。是否有一个 DRY(不要重复自己)机制来分享它们?
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"));
在“client_server_shared.js”中放置 JavaScript 和 PHP 通用的常量列表。
'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/whatever 返回。
有点丑陋的黑客,但在这里:
常量.js
//<?php $const1 = 42; $const2 = "你好"; //?>
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;
?>