PHP 注意:数组到字符串的转换仅在 PHP 7 上


PHP Notice: Array to string conversion only on PHP 7

我是PHP的新手。我从php.net研究它,但我今天发现了一个问题。

class foo {
    var $bar = 'I am bar.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo "{$foo->$bar}'n";
echo "{$foo->$baz[1]}'n";

文档(http://php.net/manual/en/language.types.string.php)说上面的例子将输出:

I am bar.
I am bar.

但是我在PC上运行了不同的输出(PHP 7):

I am bar.
<b>Notice</b>:  Array to string conversion in ... on line <b>9</b><br />
<b>Notice</b>:  Undefined property: foo::$Array in ... on line <b>9</b><br />

为什么?

这应该适用于 PHP 7:

class foo {
var $bar = 'I am bar.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo "{$foo->$bar}'n";
echo "{$foo->{$baz[1]}}'n";

这是因为在 PHP 5 中出现以下行:

echo "{$foo->$baz[1]}'n";

被解释为:

echo "{$foo->{$baz[1]}}'n";

而在 PHP 7 中,它被解释为:

echo "{{$foo->$baz}[1]}'n";

因此,在 PHP 7 中,它将整个数组传递给$foo而不仅仅是该元素。

只需将数组分配给一个变量并在函数调用中使用该变量。那会起作用...我以这种方式解决了这个问题。

因为当涉及到 PHP 7 时,当我们直接在函数调用中使用它时,它将传递整个数组。

前任:

$fun['myfun'](); // Will not work on PHP7.
$fun_name = $fun['myfun'];
$fun_name();    // Will work on PHP7.