Reputation: 490173
I just read this answer by Bill Karwin.
Note that the $node
is pass by reference.
I always thought that variable created there is only ever temporary and exists only until the end of the loop (or maybe it remains set to the last iteration - I have not tested it).
So, what are the advantages of making it pass by reference?
I'm sure there is one, but I can't figure it out yet.
Upvotes: 2
Views: 690
Reputation: 562260
It has nothing to do with being faster or more efficient.
PHP implements copy-on-write so a variable may refer to the same area of memory until you change its value. Then when you change the variable, PHP decides whether or not to create a copy depending on whether you're accessing it by value or by reference.
$a = array("abc");
foreach ($a as $element) {
$element = "def";
}
print_r($a);
Array
(
[0] => abc
)
foreach ($a as &$element) {
$element = "def";
}
print_r($a);
Array
(
[0] => def
)
Note that all objects in PHP 5 are accessed by reference without using the &
operator.
This is a good reason to use objects!
Be very careful using references in PHP, because they can have confusing effects.
Be sure to read this blog: Do not use PHP references by PHP core developer Johannes Schlüter
Upvotes: 6
Reputation: 522024
The advantage is that it lets you manipulate the array directly.
foreach ($array as $key => $node) {
$array[$key]['foo'] = 'bar';
}
can be made shorter and more efficient like this:
foreach ($array as &$node) {
$node['foo'] = 'bar';
}
In this case $node
is not a copy of the contents of the array entry, but a reference to the actual array entry; whatever you do to it, you do to the array.
Upvotes: 2