eval() 与 file_get_contents() . 不同的结果



我正在尝试将 eval(( 与 json_decode(file_get_contents((( 一起使用,并且在评估和硬编码值时得到的结果似乎不同。我只是错过了一些简单的东西吗?

我使用的是PHP版本5.3.24,目前无法更改。如果它对 eval(( 支持至关重要,我可以开始更改它的过程。我没有发现任何表明我在当前的 PHP 实现中没有 eval(( 支持的内容。

当我运行 example1('key'( 时,我从 eval(( 函数中返回 NULL。当我运行 example2('key'( 时,我得到一个基于 json 数据的数组,如下所示:

{ key_list: [ { data1_list: [ { subkey1: "data", subkey2: 0 }, .. ], .. ] }

下面是示例 1((:

function Example1($key) {
$endPoint = 'http:'.'//some.website.com/json/'.$key;
$evalCommand = sprintf('json_decode(file_get_contents("%s"))->%s_list[0];', $endPoint, $key);
echo '$evalCommand = |'.$evalCommand.'|<br />';
$resultsArray = eval($evalCommand);
return $resultsArray;
}

下面是示例 2((:

function Example2($key) {
$endPoint = 'http:'.'//some.website.com/json/'.$key;
$resultsArray = json_decode(file_get_contents($endPoint))->key_list[0];
return $resultsArray;
}

与其使用eval,不如使用更标准的代码和使用动态对象访问。

URL 的名称是可以的,但对于该字段,有一些杂耍。 这将名称设置为$field,但我无法让它在一行中完成该部分和数组部分。 在这里,它使用->$field来获取数据,并且[0]在返回中...

function Example2($key) {
$endPoint = 'http://some.website.com/json/'.$key;
$field = $key.'_list';
$resultsArray = json_decode(file_get_contents($endPoint))->$field;
return $resultsArray[0];
}

最新更新