I realize this is a very basic question but I don't even really know what to search for to find out about it.
$smarty =& SESmarty::getInstance();
What is the & for in the above?
I realize this is a very basic question but I don't even really know what to search for to find out about it.
$smarty =& SESmarty::getInstance();
What is the & for in the above?
It passes by reference. Meaning that it won't create a copy of the value passed.
See: http://php.net/manual/en/language.references.php (See Adam's Answer)
Usually, if you pass something like this:
$a = 5;
$b = $a;
$b = 3;
echo $a; // 5
echo $b; // 3
The original variable ($a) won't be modified if you change the second variable ($b) . If you pass by reference:
$a = 5;
$b =& $a;
$b = 3;
echo $a; // 3
echo $b; // 3
The original is changed as well.
Which is useless when passing around objects, because they will be passed by reference by default.
In addition to what Chacha102 said, from the manual:
References in PHP are a means to access the same variable content by different names.
The manual section is at http://php.net/manual/en/language.references.php
In PHP4, it kind of (awkwardly) associated two variables.
$j = 'original';
$i =& $j;
$i = 'modified';
echo $j; // output is 'modified'
Likewise...
$j = 'original';
$i =& $j;
$j = 'modified';
echo $i; // output is 'modified'
Some of this was made a little less unpleasant when it comes to objects in PHP5, but I think the heart of it is the same, so these examples should still be valid.
References are used to alias variables and were necessary to use the old object system efficiently.
In PHP4, objects behaved like any other value type, ie assignment would create a copy of the object. If you wanted to avoid this, you had to use a reference as in your example code.
With PHP5, object variables no longer contain the object itself, but a handle (aka object identifier) and assignment will only copy the handle. Using a reference is no longer necessary.