References Explained What References Are References in PHP are a means to access the same variable content by different names. They are not like C pointers; for instance, you cannot perform pointer arithmetic using them, they are not actual memory addresses, and so on. See What References Are Not for more information. Instead, they are symbol table aliases. Note that in PHP, variable name and variable content are different, so the same content can have different names. The closest analogy is with Unix filenames and files - variable names are directory entries, while variable content is the file itself. References can be likened to hardlinking in Unix filesystem. What References Do There are three basic operations performed using references: assigning by reference, passing by reference, and returning by reference. This section will give an introduction to these operations, with links for further reading. Assign By Reference In the first of these, PHP references allow you to make two variables refer to the same content. Meaning, when you do: d); var_dump(property_exists($c, 'd')); // bool(true) The same syntax can be used with functions that return references: value; } } $obj = new Foo(); $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42 $obj->value = 2; echo $myValue; // Prints the new value of $obj->value, i.e. 2 In this example, the property of the object returned by the getValue function would be set, not the copy, as it would be without using reference syntax. [!NOTE] Unlike parameter passing, here you have to use ENTITY in both places - to indicate that you want to return by reference, not a copy, and to indicate that reference binding, rather than usual assignment, should be done for $myValue. [!NOTE] If you try to return a reference from a function with the syntax: return ($this->value); this will not work as you are attempting to return the result of an expression, and not a variable, by reference. You can only return variables by reference from a function - nothing else. To use the returned reference, you must use reference assignment: foo ) [!NOTE] If the assignment is done without the ENTITY symbol, e.g. $collection = collector();, the $collection variable will receive a copy of the value, not the reference returned by the function. To pass the returned reference to another function expecting a reference you can use this syntax: