具有短阵列的Php匿名函数在5.4.35中不起作用

时间:2014-12-12 16:42:01

标签: php

我对这个php脚本有一个奇怪的问题

<?php

$expr = '["Nizky_tarif","Vysoky_tarif"][0 == 1]';
$newfunc = @create_function('', "return $expr;");

var_dump($newfunc);
echo $newfunc();

在服务器上,它崩溃并出现错误:

bool(false)
PHP Fatal error:  Function name must be a string in /tmp/foo.php on line 7

在localhost上它可以工作:

string(9) "\000lambda_1"
Nizky_tarif

服务器php版本是5.4.35,localhost 5.6.3。但是我不明白为什么它不起作用,在5.4中添加了短数组语法,对吗?

PS。刚刚尝试过,如果我将其更改为旧的数组语法,它也会崩溃。

1 个答案:

答案 0 :(得分:1)

在表达式["Nizky_tarif","Vysoky_tarif"][0 == 1]中,代码试图直接取消引用数组文字。这是feature which was introduced with PHP 5.5

使用PHP 5.4,此表达式无效,导致错误“函数名称必须是字符串”。

您可以将其更改为部分以使其正常工作:

$data = ["Nizky_tarif","Vysoky_tarif"];
return $data[0 == 1];