将数组转换为PHP代码

qua*_*oup 0 php arrays metaprogramming

在上一篇关于数组更好的语法的文章之后,我决定对数组使用JSON格式,并使用一种将其转换为PHP代码的方法。

请注意,此方法的最终目标是用JSON编写$ config数组并将其转换为PHP代码(因此,我可以避免使用PHP的丑陋数组语法):

该函数适用于任意大小和尺寸的数组,也许我可以通过使其自动缩进来改进它,但是没有更多的东西了。这里有人对如何改善它有任何建议吗?

dav*_*nal 6

你看到了var_export吗?看来您已经重新发明了它。

另外,如果要在JSON中定义配置,为什么要将其转换为PHP语法?为什么不只是以JSON形式读取它json_decode,然后按原样使用它呢?似乎保持以PHP格式和JSON格式序列化的数据确实很丑陋和不必要。

我也将回应琥珀在评论中所说的话……似乎您已经用一个更加丑陋的hack代替了难看但非常简单的PHP数组语法。没有冒犯,但这似乎不是一个好主意。这是 Kohana PHP框架中的配置文件示例。我发现该文件阅读起来并不十分丑陋,它是本机PHP,因此任何PHP开发人员都可以使用它。


dav*_*nal 5

我会尽最后的努力来说服你不要这样做。你要求改进你的想法的方法,你能做的最好的改进就是不去做。

这是来自 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,
    ),
);
Run Code Online (Sandbox Code Playgroud)

这是 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
    }
};
Run Code Online (Sandbox Code Playgroud)

他们几乎一模一样。我真的看不到你得到了什么。