Приглашаем посетить
Perl (perl.find-info.ru)

Section 5.12.  References

Previous
Table of Contents
Next

5.12. References

When you use the = (assignment) operator, PHP performs a "copy assignment"it takes the value from operand two and copies it into operand one. While this is fine for most purposes, it doesn't work when you want to be able to change operand two later on and have operand one also change.

In this situation, references are helpful; they allow you to have two variables pointing to the same data. Once two variables are pointing to the same data, you can change either variable and the other one will also update. To assign by reference, you need to use the reference operator (&) after the equals operator (=), giving =&.

Section 5.12.  References

Perl programmers should not confuse the PHP references with Perl references. Instead, the equivalent in Perl and some other languages is called aliasing.


Here's how it looks in PHP:

    $a = 10;
    $b =& $a;
    print $a;
    print $b;
    ++$a;
    print $a;
    print $b;
    ++$b;
    print $a;
    print $b;

Here we're using the reference operator to make $b point to the same value as $a, as can be seen in the first two print statements. After incrementing $a, both variables are printed out again, and both are 11, as expected. Finally, to prove that the relationship is two-way, $b is incremented, and again both $a and $b have been updated with the one call.

Section 5.12.  References

As of PHP 5, objects are passed and assigned by reference by default. Technically, each object has a "handle," which uniquely identifies that object. When you copy an object, you are actually copying its object handle, which means the copy will reference the same object as the original. This was different before PHP 5objects were treated like other types of variables and copied entirely when assigned. This led to many programmers inadvertently copying lots of information in their scripts without realizing it, which was wasteful. Therefore, from PHP 5 onward, objects are always assigned by reference and passed into functions by reference, avoiding the speed hit. See Chapter 8 for more information.


References are also used to allow a function to work directly on a variable rather than on a copy.


Previous
Table of Contents
Next