【问题标题】:Share Constants Between PHP and JavaScript [duplicate]在 PHP 和 JavaScript 之间共享常量 [重复]
【发布时间】:2010-10-01 05:28:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: php javascript code-generation dry


    【解决方案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 语法。 PHP 中没有 JSON 对象。只有 json_*() 函数。
    • 糟糕。我已经更新了它,所以没有混淆:D
    • 这很好,但是,get_class_vars 似乎跳过了类中的 const 变量。
    • 嘿,至少现在是这样 :) 虽然我仍然认为最简单的方法是将它留在关联数组中。而这次我也实际测试过了!
    • 谢谢,这很好用。我喜欢使用 const 成员变量而不是关联数组,因为我的 IDE 可以完成代码。
    【解决方案2】:

    在“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 );
    

    【讨论】:

    • 我真的很喜欢这个解决方案的简单性,但是如果 var 在 PHP 中被弃用,我们应该假设这个解决方案最终会崩溃,对吧?
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      有点丑陋的黑客,但它就是这样:

      constants.js

      //

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

      【讨论】:

      • 我知道这个答案会被否决! :)
      猜你喜欢
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2013-04-16
      相关资源
      最近更新 更多