【问题标题】:PHP eval(array_as_string) returns nullPHP eval(array_as_string) 返回 null
【发布时间】:2012-10-19 14:20:54
【问题描述】:
$arr = eval("array('foo'=>'bar');");

// returns null
var_dump($arr);

谁能解释一下为什么我得到的是 null 而不是数组?

【问题讨论】:

  • 你为什么evaling那个字符串?必须有更好的方法来做到这一点,例如json_decodeunserialize

标签: php eval


【解决方案1】:

你需要return数组。

来自docs

eval() 返回NULL,除非在评估代码中调用return,在这种情况下,将返回传递给return 的值。

所以你需要这样做:

$arr = eval("return array('foo'=>'bar');");

【讨论】:

  • 知道了,谢谢。 Return Value我没太在意,只看了不使用return的例子。
  • @user1643156:你为什么首先使用eval?它缓慢且不安全。可能有更好的方法来做你想做的事。
【解决方案2】:

你是说

eval("\$arr = array('foo'=>'bar');"); 

var_dump($arr);

【讨论】:

  • 您需要转义$。你在双引号中,所以 PHP 试图插入 $arr,因为它不存在你结束了 evaling " = array('foo'=>'bar');"
【解决方案3】:

eval 函数执行给它的 php 代码。 由于您的代码不返回任何内容,因此它给出了 null。 您需要返回数组并将其存储在变量中,例如,

$arr = eval("return array('foo'=>'bar');");

【讨论】:

    【解决方案4】:

    首先,如manual 中所述,强烈建议不要使用eval

    另外,你应该做类似$arr = eval("return array('foo'=>'bar');"); 的事情,即。使用 eval 函数初始化 $arr。亲身体验here

    【讨论】:

    • 谢谢,我知道 eval() 的邪恶部分。该功能仅供我(管理员)使用。
    猜你喜欢
    • 2012-08-01
    • 2014-03-27
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多