If you want to have nice output colouring of your PHP scripts or those from Symfony Console, you should install POSIX extension to your PHP version.
sudo port install php56-posix
If you want to have nice output colouring of your PHP scripts or those from Symfony Console, you should install POSIX extension to your PHP version.
sudo port install php56-posix
$arr = array(1,2,3,4,5,6); foreach($arr as $v){ $arr[] = 1; echo $v; }
output: 123456
$arr = array(1,2,3,4,5,6); foreach($arr as &$v){ $arr[] = 1; echo $v; }
output: 1234561111111111111111111111111111111111111111111111…
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 32 bytes) in /Users/gradzinski/dev/playground/foreach.php on line 7
So within the foreach loop we are adding 1 to referenced array arr
and this is why we are failing into infinite loop.
Below you can find PHP foreach manual explanation that may put some light in that behaviour.
Referencing $value is only possible if the iterated array can be referenced (i.e. if it is a variable). The following code won’t work:
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
It is not really that we are passing object instances in PHP by reference. It is a little bit tricky, but the manual has this covered!
As of PHP 5, an object variable doesn’t contain the object
itself as value anymore. It only contains an object identifier which allows
object accessors to find the actual object. When an object is sent by
argument, returned or assigned to another variable, the different variables
are not aliases: they hold a copy of the identifier, which points to the same
object.
<?php class A { public $foo = 1; } $a = new A; $b = $a; $a->foo = 2; $a = NULL; echo $b->foo."\n"; // 2 $c = new A; $d = &$c; $c->foo = 2; $c = NULL; echo $d->foo."\n"; // Notice: Trying to get property of non-object… ?>