可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am a newbie of PHP. I study it from php.net
, but I found a problem today.
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";
The documentation(http://php.net/manual/en/language.types.string.php) say that the above example will output:
I am bar. I am bar.
But I get the different output run on my 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 />
Why?
回答1:
This should work with 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";
This is caused because in PHP 5 the following line:
echo "{$foo->$baz[1]}\n";
is interpreted as:
echo "{$foo->{$baz[1]}}\n";
While in PHP 7 it's interpreted as:
echo "{{$foo->$baz}[1]}\n";
And so in PHP 7 it's passing the entire array to $foo instead of just that element.
回答2:
Just assign array to a variable and use that variable on function call. That will work... I fixed this issue in that way.
Because when coming to PHP 7, that will pass whole array when we directly used it on function call.
EX: $fun'myfun'; // Will not work on PHP7.
$fun_name = $fun['myfun']; $fun_name(); // Will work on PHP7.