Php: json 到常量

Php: json to constants

我有一个 Json,其中包含一些我想自动定义的内容。它适用于简单的 "key": "val" 语句,但我无法使其适用于 eval 语句:

$cat test.php
<?php

function objDefinition($obj) {
    foreach ($obj as $key => $val) {
        $val = $val;
        \define($key, $val);
    } }


$json = \json_decode(\json_encode([
'COOKIE_EXP' => "eval('time() + (10 * 365 * 24 * 60 * 60)')",
]));

objDefinition($json);
echo COOKIE_EXP;

$php test.php
eval('time() + (10 * 365 * 24 * 60 * 60)')

我知道 eval 是邪恶的等等,但是这个方法会节省我很多代码!

谢谢!

我认为你应该稍微改变一下你的数据结构和你的方法,像这样应该可以解决问题:

    function objDefinition($obj) {
        foreach ($obj as $key => $val) {
            if (strstr($val, 'eval=')) {
                \define($key, eval(str_replace('eval=', '', $val)));
            } else {
                \define($key, $val);
            }
        }
    }


    $json = \json_decode(\json_encode([
        'COOKIE_EXP' => "eval=time() + (10 * 365 * 24 * 60 * 60)",
    ]));

@taxicala

你快明白了:

function objDefinition($obj)
{
    foreach ($obj as $key => $val) {
        if (strstr($val, 'eval=')) {
            $val = str_replace('eval=', '', $val);
            eval("$val = $val;");
        }
        \define($key, $val);
    }
}


$json = \json_decode(\json_encode([
    'COOKIE_EXP' => "eval=time() + (10 * 365 * 24 * 60 * 60)",
]));

\objDefinition($json);
echo COOKIE_EXP;

谢谢!