PHP Notice: Array to string conversion only on PHP 7

匿名 (未验证) 提交于 2019-12-03 02:26:02

问题:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!