骨干满意全数配置相关的须要。

$url = $this->getConfig ;$content = "var url={ base:'{$url->base}',css:'{$url->css}',js:'{$url->js}',img:'{$url->img}',current:window.location};";$expire = 604800;header ( 'Content-type: application/x-javascript' );header ( 'Cache-Control: max-age=' . $expire );header ( 'Accept-Ranges: bytes' );header ( 'Content-Length: ' . strlen ;echo $content;

在前边小编写过php再次来到json数据轻便实例,刚刚上网,猛然意识风华正茂篇文章,也是介绍json的,还挺详细,值得仿照效法。内容如下

/** * 解析.ini格式的配置文件为一个树形结构的对象 * 配置文件不同section通过冒号继承 * 默认根据hostname确定使用的section,如果不能确定就优先使用production * 检测环境的时候总是优先检测production,其余section按定义顺序检测 * * @author ares@phpdr.net * */class Config { /** * 解析后的配置文件 * * @var stdClass */ private $config; /** * 一个二维数组,键是配置文件的section * 值是一个数组或回调函数 * 如果是数组则计算hostname是否在数组中决定是否使用该section * 如果是回调函数通过返回值true或false来确定是否使用该section * * @var array */ private $map = array (); /** * section会被解析,:表示继承 * 配置项中的'.'用来区分层级关系 * section中的'.'不会被解析,配置中的数组不受影响。 * * @param string $conf * @throws ErrorException * @return stdClass */ function __construct { $config = $this->parseIni  parse_ini_string ; if (array_key_exists ) { $production = $map ['production']; unset ( $map ['production'] ); $map = array_merge ( array ( 'production' => $production ), $map ); } else { throw new ErrorException ( 'production section not found in config' ); } $section = 'production'; $hostname = gethostname (); foreach  { if  { foreach  { if  { $section = $k; break 2; } } } elseif  { if (true == call_user_func  { $section = $k; break; } } else { throw new ErrorException ( 'Wrong map value in ' . __CLASS__ ); } } $this->config = $config->$section; } /** * 总是返回配置对象 * * @return mixed */ function __get { if (isset ( $this->config->$key )) { return $this->config->$key; } } /** * 切分 * * @param stdClass $v * @param string $k1 * @param mixed $v1 */ private function split { $keys = explode ; $last = array_pop ; $node = $v; foreach  { if (! isset  { $node->$v2 = new stdClass (); } $node = $node->$v2; } $node->$last = $v1; if  { unset ; } } /** * parseIni * * @param object $conf * @return stdClass */ private function parseIni { $confObj = new stdClass (); foreach  { // 是section if  { $confObj->$k =  $v; foreach  { call_user_func ( array , $confObj->$k, $k1, $v1 ); } } else { call_user_func ( array , $confObj, $k, $v ); } } unset ; // 处理继承 foreach ( $confObj as $k => $v ) { if (false !== strpos  { if (0 === strpos  { throw new ErrorException ( 'config ' . $k . ' is invalid, ':' can't be the first char' ); } elseif (1 < substr_count  { throw new ErrorException ( 'config ' . $k . ' is invalid, ':' can appear only once' ); } else { $keys = explode ; if (! isset ( $confObj->$keys [1] )) { throw new ErrorException ( 'parent section ' . $keys [1] . ' doesn't exist in config file' ); } else { if (isset ( $confObj->$keys [0] )) { throw new ErrorException ( 'config is invalid, ' . $keys [0] . ' and ' . $k . ' conflicts' ); } else { $confObj->$keys [0] = $this->deepCloneR ( $confObj->$keys [1] ); $this->objectMergeR ( $confObj->$keys [0], $v ); unset ; } } } } } return $confObj; } /** * php默认是浅克隆,函数实现深克隆 * * @param object $obj * @return object $obj */ private function deepCloneR { $objClone = clone $obj; foreach ( $objClone as $k => $v ) { if  { $objClone->$k = $this->deepCloneR ; } } return $objClone; } /** * 递归的合并两个对象 * * @param unknown $obj1 * @param unknown $obj2 */ private function objectMergeR { foreach  { if  && isset  && is_object  { $this->objectMergeR ; } else { $obj1->$k = $v; } } }}

$_ENV ['config'] = new Config ( file_get_contents ( __DIR__ . '/config.ini' ), array ( 'development' => array ( 'localhost.localdomain', 'localhost' ), 'production' => array ;

[product]db.default.dsn="mysql:host=127.0.0.1;dbname=default"db.default.username=rootdb.default.password=123456admin.username=adminadmin.password=123456php.error_reporting=E_ALLphp.display_errors=nophp.log_errors=yesphp.error_log=APP_PATH'/resource/log/phpError.log'php.session.save_path=APP_PATH'/resource/data/session'[development:product]db.test1.dsn="mysql:host=127.0.0.1;dbname=test1"db.test1.username=rootdb.test1.password=123456php.display_errors=yes

从5.2本子开头,PHP原生提供json_encode函数,前面三个用于编码,后面一个用于解码。

一、json_encode()

复制代码
代码如下:1,’b’=>2,’c’=>3,’d’=>4,’e’=>5卡塔尔(英语:State of Qatar);echo
json_encode;?>

复制代码
代码如下:{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}

再看三个指标转变的例子:

复制代码 代码如下:$obj->body =
‘another post’;$obj->id = 21;$obj->approved =
true;$obj->favorite_count = 1;$obj->status = NULL;echo
json_encode;

[/code]{ “body”:”another post”, “id”:21, “approved”:true,
“favorite_count”:1, “status”:null }[/code]

鉴于json只选用utf-8编码的字符,所以json_encode(卡塔尔的参数必得是utf-8编码,不然会收获空字符只怕null。当汉语使用GB2312编码,恐怕外文使用ISO-8859-1编码的时候,那一点要特别注意。

二、索引数组和关周密组

PHP帮衬三种数组,后生可畏种是只保留”值”的索引数组,另风姿浪漫种是保留”名值对”的涉及数组。

出于javascript不扶助关联数组,所以json_encode(卡塔尔(英语:State of Qatar)只将索引数组转为数组格式,而将波及数组转为对象格式。

比方,今后有多少个索引数组

复制代码 代码如下:$arr = Array(‘one’,
‘two’, ‘three’卡塔尔国;echo json_encode;

复制代码 代码如下:[“one”,”two”,”three”]

风姿罗曼蒂克经将它改为涉及数组:

发表评论

电子邮件地址不会被公开。 必填项已用*标注