将数组转换为PHP代码
在上一篇关于的文章之后,我决定对数组使用JSON格式,并使用一种方法将它们转换为PHP代码 请注意,本文的最终目标是用JSON编写$config数组,并将其转换为PHP代码,这样我就可以避免使用PHP难看的数组语法: 该函数适用于任意大小和尺寸的数组,也许我可以通过让它自动缩进来改进它,但没有更多。这里有人对如何做得更好有什么建议吗?你看到了吗?看起来你已经重新发明了它 另外,如果您使用JSON定义配置,为什么要将其转换为PHP语法?为什么不把它作为JSON读入,JSON_解码,然后按原样使用呢?看起来,以PHP格式和JSON格式对数据进行序列化是非常难看和不必要的将数组转换为PHP代码,php,arrays,metaprogramming,Php,Arrays,Metaprogramming,在上一篇关于的文章之后,我决定对数组使用JSON格式,并使用一种方法将它们转换为PHP代码 请注意,本文的最终目标是用JSON编写$config数组,并将其转换为PHP代码,这样我就可以避免使用PHP难看的数组语法: 该函数适用于任意大小和尺寸的数组,也许我可以通过让它自动缩进来改进它,但没有更多。这里有人对如何做得更好有什么建议吗?你看到了吗?看起来你已经重新发明了它 另外,如果您使用JSON定义配置,为什么要将其转换为PHP语法?为什么不把它作为JSON读入,JSON_解码,然后按原样使用呢
我也会回应amber在评论中说的话。。。看起来你已经用一个更难看的黑客取代了有点难看但非常简单的PHP数组语法。无意冒犯,但这似乎不是个好主意。来自Kohana PHP框架的配置文件。我不觉得这个文件读起来特别难看,它是原生PHP,所以任何PHP开发人员都可以使用它。var\u export是您的答案!让你的工作更轻松。我会做最后一次努力说服你不要这样做。你要求改进你的想法,你能做的最好的改进就是不去做 以下是来自Kohana的配置文件的PHP版本:
$test = array(
'default' => array(
'type' => 'mysql',
'connection' => array(
'hostname' => 'localhost',
'database' => 'kohana',
'username' => FALSE,
'password' => FALSE,
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
'alternate' => array(
'type' => 'pdo',
'connection' => array(
'dsn' => 'mysql:host=localhost;dbname=kohana',
'username' => 'root',
'password' => 'r00tdb',
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
);
以下是JSON版本:
var test = {
"default": {
"type": "mysql",
"connection": {
"hostname": "localhost",
"database": "kohana",
"username": false,
"password": false,
"persistent": false
},
"table_prefix": "",
"charset": "utf8",
"caching": false,
"profiling": true
},
"alternate": {
"type": "pdo",
"connection": {
"dsn": "mysql:host=localhost;dbname=kohana",
"username": "root",
"password": "r00tdb",
"persistent": false
},
"table_prefix": "",
"charset": "utf8",
"caching": false,
"profiling": true
}
};
他们几乎一模一样。我真的看不出你得到了什么。好的,在听取了这里所有人的反馈之后,我决定做出妥协。我对现有数组语法的主要不满是它的可读性差,使用缩进当然可以大大提高可读性 因为我懒于缩进,而且我编写的文件很大,所以我选择了JSON或任何比PHP更可读的语法。我没有说得很清楚,但我之所以使用JSON格式的另一个重要原因是,许多其他人会查看这些配置文件。他们中的大多数人都不懂PHP,JSON是一种更具可读性的格式 不幸的是,PHP代码格式化程序/美化程序对数组格式化没有任何作用,所以我自己编写了代码。它是基于我上面写的那段难看的代码,它更难看,但它完成了任务 结果是现在我基本上有了一个数组美化器,我可以在懒惰的时候生成可读的本机PHP代码。这就是我想要的,谢谢大家的建议和指点 PS:这是我用函数生成的美化的Kohana配置数组:
array (
'default' => array (
'type' => 'mysql',
'connection' => array (
'hostname' => 'localhost',
'database' => 'kohana',
'username' => false,
'password' => false,
'persistent' => false
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => false,
'profiling' => true
),
'alternate' => array (
'type' => 'pdo',
'connection' => array (
'dsn' => 'mysql:host=localhost;dbname=kohana',
'username' => 'root',
'password' => 'r00tdb',
'persistent' => false
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => false,
'profiling' => true
)
);
这看起来一点也不糟糕。这是我的解决方案
$data = json_decode(file_get_contents(__DIR__ . '/data.json'));
$code = var_export((array)$data, true);
$code = "<?php\n return " . preg_replace('/stdClass::__set_state/', '(object)', $code) . ';';
file_put_contents(__DIR__ . '/data.array.php', $code);
数据取自JSON文件,但可以替换为其他内容。这似乎用一段设计用来绕过它的代码来取代PHP数组语法的丑陋。事实上,但最终目标是简化配置数组的编写,如果用PHP编写,它可能会变得非常混乱。这段代码会运行几次,但会让我的生活和其他代码的维护变得更容易。。。为什么不使用json_编码呢?看看你的代码是否会被其他人维护这是个坏主意。作为昨天这个json_解码解决方案的作者,我不得不说这有点疯狂。没有任何方法比语言提供的创建数组的标准方法更容易维护,因为这是在PHP101中学习的第一件事。数组并没有那么难看,你现在花了更多的时间来创建一个解决方案,以避免不得不写“array”一词,而不是你只需要咬紧牙关手工创建数组。var_export缺少$cleanKeys功能,即:生成array1,2而不是array0=>1, 1 => 2@Aircule这很重要吗?不是很重要,但会让事情变得更加混乱。艾库勒,这些事情其实是一样的。您应该像我发布的示例一样格式化您的数组,以使其可读。这会让它感觉不那么凌乱。@Aircule-另外,您的代码似乎容易受到SQL注入之类的代码注入的攻击,但对于PHP,因为您不会转义字符串。您可以使用$s=var\u export$x,如果是真的,则使用您的\u parse\u beuty$s仅用于美化空格和行。