What References Are
What References Are Not
References Explained
PHP Manual

## 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 to 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:

`<?php
$a =& $b;
?>`
it means that $a and $b point to the same content.

> Note: $a and $b are completely equal here. $a is not pointing to $b or vice versa. $a and $b are pointing to the same place.

> Note: If arrays with references are copied, their values are not dereferenced. This is valid also for arrays passed by value to functions.

> Note: If you assign, pass, or return an undefined variable by reference, it will get created.

> Example #1 Using references with undefined variables

> `<?php
> function foo(&$var) { }
> foo($a); // $a is "created" and assigned to null
> $b = array();
> foo($b['b']);
> var_dump(array_key_exists('b', $b)); // bool(true)
> $c = new StdClass;
> foo($c->d);
> var_dump(property_exists($c, 'd')); // bool(true)
> ?>`

The same syntax can be used with functions that return references, and with the new operator (since PHP 4.0.4 and before PHP 5.0.0):

`<?php
$foo =& find_var($bar);
?>`
Since PHP 5, new returns a reference automatically, so using =& in this context is deprecated and produces an `E_STRICT` message.
Warning

If you assign a reference to a variable declared global inside a function, the reference will be visible only inside the function. You can avoid this by using the $GLOBALS array.

Example #2 Referencing global variables inside functions

`<?php
$var1 = "Example variable";
$var2 = "";
function global_references($use_globals)
{
global $var1, $var2;
if (!$use_globals) {
$var2 =& $var1; // visible only inside the function
} else {
$GLOBALS["var2"] =& $var1; // visible also in global context
}
}
global_references(false);
echo "var2 is set to '$var2'\n"; // var2 is set to ''
global_references(true);
echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'
?>`
Think about global $var; as a shortcut to $var =& $GLOBALS['var'];. Thus assigning another reference to $var only changes the local variable's reference.

> Note: If you assign a value to a variable with references in a foreach statement, the references are modified too.

> Example #3 References and foreach statement

> `<?php
> $ref = 0;
> $row =& $ref;
> foreach (array(1, 2, 3) as $row) {
> // do something
> }
> echo $ref; // 3 - last element of the iterated array
> ?>`

### Pass By Reference

The second thing references do is to pass variables by reference. This is done by making a local variable in a function and a variable in the calling scope referencing the same content. Example:

`<?php
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
?>`
will make $a to be 6. This happens because in the function foo the variable $var refers to the same content as $a. For more information on this, read the passing by reference section.

### Return By Reference

The third thing references can do is return by reference.

What References Are
What References Are Not
References Explained
PHP Manual