◆ PHPで関数を作るときに&をつけて参照受け取りにします
◆ リテラルを渡せないです 

function double($a){
return $a*2;
}
$val = 20;
double($val); // 40
double(10); // 20
double($a); // Undefined variable: a

宣言してない変数を使おうとするとエラーが出ます

ですが
function double(&$a){
return $a*2;
}
$val = 20;
double($val); // 40
double($a); // 0
double(10); // Only variables can be passed by reference

引数の受け取りを & で参照受け取りにすればエラーは出ません
逆にリテラルを渡すことができなくなります

小ネタとして書きましたが を呼び出す時に毎回つけるのがめんどうだからといってこの方法を使うのはあまり勧められることじゃないです
参照なので $a を書き換えると呼び出し元の変数も値が変わってしまいますし Copy on Write という最適化関係で不要に遅くなる場合もあります


実はこの機能は preg_match の第三引数のように存在しない変数指定して関数実行後には 値が入ってるというところで使われてます
JavaScriptの var みたいに宣言がないですから分かりづらいです

php4のころは var で変数宣言すると聞いたことがあります
レキシカルスコープじゃないので不要と判断されたのかな と思ってましたが調べてみると 変数じゃなくてプロパティ(メンバ変数)の宣言だけでしか使えないみたいです

早くレキシカルスコープ対応して
use いちいち書きたくないよ