12

重複の可能性:
PHP 文字列を Javascript 変数に渡す (および改行をエスケープする)

開発中の PHP アプリケーションにはいくつかの定数があります。Constants クラスを定義し、定数を const VAR_NAME = value; として定義しました。このクラスで。これらの定数を JavaScript と PHP コードの間で共有したいと考えています。それらを共有するための DRY (Don't Repeat Yourself) メカニズムはありますか?

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

4 に答える 4

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"));
于 2009-01-13T19:51:22.990 に答える
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 );
于 2011-07-25T15:37:12.840 に答える
-1

定数を共有できる唯一の方法は、php 側から JavaScript に通知することです。例えば:

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

または、ajax を使用して、定数を JSON などとして返す小さなスクリプトを作成することもできます。

于 2009-01-13T19:51:39.010 に答える
-2

少し醜いハックですが、次のようになります。

定数.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;
?>
于 2009-01-13T20:08:27.433 に答える