Есть вот такая упрощённая программа:
function func(array $par) {
$par[0] += 5;
echo $par[0] . "<br>";
}
$var = 10;
func(array(&$var));
echo $var . "<br>";
Переменная передаётся в функцию в массиве по ссылке.
Результат:
15
15
Параметр $par сохраняет связь с переменной $var.
Теперь, допустим, перед передачей переменной необходимо выполнить проверку на её существование. Можно попробовать сделать это так:
$var = 10;
func(array(isset($var)? &$var : 0)); // Ошибка!
echo $var . "<br>";
Но операция получения адреса в условном операторе не работает, поэтому такой код выдаст ошибку.
Можно немного схитрить и воспользоваться присваиванием по ссылке, получится такой код:
$var = 10;
func(array(isset($var)? $temp =& $var : 0));
echo $var . "<br>";
Результат:
15
10
Как видим, значение действительно передалось, но связь между $par и $var потеряна. Можно, конечно, сначала выполнить проверку, а потом уже вызов функции как в первом примере. Но мне всё-таки интересно - что не так с этим кодом, почему он не работает?