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

liz*_*izs 8 php 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";
Run Code Online (Sandbox Code Playgroud)

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

I am bar.
I am bar.
Run Code Online (Sandbox Code Playgroud)

但我在我的电脑上运行不同的输出(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 />
Run Code Online (Sandbox Code Playgroud)

为什么?

C.L*_*ell 25

这适用于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";
Run Code Online (Sandbox Code Playgroud)

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

echo "{$foo->$baz[1]}\n";
Run Code Online (Sandbox Code Playgroud)

被解释为:

echo "{$foo->{$baz[1]}}\n";
Run Code Online (Sandbox Code Playgroud)

在PHP 7中,它被解释为:

echo "{{$foo->$baz}[1]}\n";
Run Code Online (Sandbox Code Playgroud)

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