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.
Access by value -- changes to a variable creates a copy:
$a = array("abc");
foreach ($a as $element) {
$element = "def";
}
print_r($a);
Array
(
[0] => abc
)
Access by reference -- changes to a variable affect the original copy:
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