php 7 – PHP Notice: Array to string conversion only on PHP 7-ThrowExceptions

Exception or error:

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?

How to solve:

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.

Answer´╝Ü

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.

Leave a Reply

Your email address will not be published. Required fields are marked *