PHP和JavaScript的常见常量文件

时间:2010-05-06 13:02:34

标签: php javascript constants

为了不重复代码,人们如何建议在PHP和JavaScript之间共享常量文件? XML文件?我假设在PHP中混合javascipt不是正确的解决方案!?谢谢

3 个答案:

答案 0 :(得分:4)

http://php.net/manual/en/book.json.php

我会说使用json。它是javascript的原生,并且有一个php的解析器库。

考虑以下事项:

JSON:

{constants : { var1 : "value 1", var2 : "value 2", var3 : "value 3"}}

然后将其读入php:

$const = json_decode(json_string);

这为您提供了对象$ const,其中包含$ const-> {'var1'}等属性,返回“value 1”。

在JavaScript中

这将是:

var const = eval(json_string);

并且会给你const.constants.var1 ==“value 1”。

js实际上最简单的实现是:

<script type="text/javascript" src="json_constants_file.js"></script>

当添加html输出时,你立即拥有一个常量对象,其他对象作为其子对象。

答案 1 :(得分:0)

PHP和JavaScript共享的配置变量可以很容易地存储为XML,是的。但是,JSON可能是一个更好的解决方案,因为它需要很少的解析工作 - JS本地处理它,而PHP将其转换为json_decode的数组。

答案 2 :(得分:0)

您可以尝试我的方法。我创建了一个用于php和js文件的公共配置文件。

看看这个技巧:

PHP类配置文件:

<?php
/** Class Start **/
class Config {    
    /********************************/
    /* Page Config Info */
    /********************************/
    // page title
    const PAGE_TITLE = 'Welcome in Code Era!';  
    // base url 
    const BASE_URL = 'http://www.myapp.com/';  
    /********************************/
    /* Database Config Info */
    /********************************/
    // mysql host server
    const SERVER = '10.102.23.141';
    // database user name
    const USER = 'root';
    // database password
    const PASSWORD = '';
    // mysql database name
    const DATABASE = 'sample';
    /********************************/
    /* Share Message */
    /********************************/
    // Facebook Share Message
    const FB_SHARE_MESSAGE = 'This gonna my share message'; 
    // Facebook Share Title 
    const FB_SHARE_TITLE = 'This gonna my share title';      
    // Facebook Share Caption
    const FB_SHARE_CAPTION = 'This gonna my share caption';      
}
/** Class End **/
?>

JavaScript文件:

// global config var
var config = {} || '' || null;
/**
 * Get Config data with Ajax Response Data
 * custom ajax method
 * return ajax response and use/store as javascript var
 * extend jQuery Ajax and change it
 * @param qs -> query string {q:value}
 * @returns result mix|multitype
 */
$.extend({
    getConfig : function (qs) {
        var result = null;
        $.ajax({
            url : 'GetConfig.php',
            type : 'POST',
            data : qs,
            dataType : "json",
            async : false,
            success : function (data) {
                result = data;
            },
            error : function ajaxError(jqXHR, exception) {
                if (jqXHR.status === 0) {
                    alert('Not connected.\nVerify your network.');
                } else if (jqXHR.status === 404) {
                    alert('The requested page not found. [404]');
                } else if (jqXHR.status === 500) {
                    alert('Internal Server Error [500].');
                } else if (exception === 'parsererror') {
                    alert('Requested JSON parse failed.');
                } else if (exception === 'timeout') {
                    alert('Time out error.');
                } else if (exception === 'abort') {
                    alert('Ajax request aborted.');
                } else {
                    alert('Uncaught Error.\n' + jqXHR.responseText);
                }
            }
        });
        return result;
    }
});

// Collect all Class Constant data on page load
var CONFIG = (function() {
    var private = $.getConfig({config_item : ''});
    return {
       get: function(name) { return private.data[name]; }
   };
})();

/**
 * Facebook Share Content example code
 * with using class constant
 */
function fbShare() {
    var feed = {
        method : 'feed',        
        link : CONFIG.get('BASE_URL'),
        name : CONFIG.get('FB_SHARE_TITLE'),        
        caption : CONFIG.get('FB_SHARE_CAPTION')
    };
    function callback(response) {
        if (response && response.post_id !== undefined) {
            alert('Thank you for sharing the content.');
        }
    }
    FB.ui(feed, callback);
}

如何在JavaScript中使用

var fbShareMessage = CONFIG.get('FB_SHARE_MESSAGE');

没有CONFIG.get功能示例:

var fbShareMessage = $.getConfig({config_item : 'FB_SHARE_MESSAGE'}).data;

GetConfig.php的PHP代码文件:

<?php
/**
 *  Get Config php file
 *  request a config item from javascript/ajax
 *  return json data
 */
// check request with ajax only
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    exit;
}
// include class config
require_once '../class/class.config.php';
// get all constant from class config
$configConstant = new ReflectionClass('Config');
// store as array in var
$configConstantArray = ($configConstant->getConstants());
// safe and private request item
$black_list_constant = 'SERVER|USER|PASSWORD|DATABASE';
$black_list_object = explode('|',$black_list_constant);
// make return jason format
$result = array();
// get action from ajax
$action = $_POST['config_item'];
switch ($action) {
    case '':
    $result["status"]= TRUE;    
    foreach ($black_list_object as $index => $value){       
        if(array_key_exists($value, $configConstantArray)){
            unset($configConstantArray["$value"]);                  
        }       
    }
    $result["data"]= $configConstantArray;
    $result["msg"]= 'Response 200 OK';
    echo json_encode($result);
    break;
    default:
    // check valid action
    if(array_key_exists($action,$configConstantArray) && in_array($action,$black_list_object)){
        $result["status"]= FALSE;
        $result["data"]= null;
        $result["msg"]= 'Response 201 FAIL';
        echo json_encode($result);
    }else{
        $result["status"]= TRUE;
        $result["data"]= $configConstantArray["$action"];
        $result["msg"]= 'Response 200 OK';
        echo json_encode($result);
    }
    break;
}

就是这样。希望,它会对某人有所帮助:)。