Avoid не может передать ошибку ссылки в функцию

У меня есть функция, где аргумент передается со ссылкой (&). Однако, если я установлю этот аргумент в NULL, я получу ошибку:

«Невозможно передать параметр 1 по ссылке в …»

Это скрипт:

<?php
function doSomething(&$reference,$arg1,$arg2){
if($reference !== NULL){
//Do something with reference

}else{
//Do something else
}
}

//Call with reference
doSomething($a,$b,$c);

//Call without reference
//doSomething(NULL,$b,$c);
?>

Я думаю, это связано с тем, что NULL не объявлен как переменная, а сразу объявлен в самой функции. Это работает, когда я делаю это:

$nullVar = NULL;
doSomething($nullVar,$b,$c);

Как мне отредактировать мою функцию, чтобы она не отображала ошибку ссылки, когда я просто поместил в функцию значение NULL, и сохранил ссылку только тогда, когда это возможно (поскольку я не использую ссылку, когда она установлена ​​в NULL)

0

Решение

Вы все еще можете создать необязательную ссылку, если поменяете местами аргументы:

function doSomething($arg1,$arg2, &$reference = null){
if($reference !== NULL){
//Do something with reference

}else{
//Do something else
}
}

$a = 'a';
$b = 'b';

doSomething($a, $b);

Но мимоходом null этот третий аргумент все равно вызовет ошибку.

doSomething($a, $b, null); // error

Также ссылки могут быть удовлетворены вновь созданными переменными. Поскольку переменные без присвоенных значений по умолчанию nullВы можете предоставить переменную без намерения использовать ее впоследствии.

doSomething($a, $b, $unused_var);
2

Другие решения

Вы не можете ссылаться на NULL, он не существует. Честно говоря, проверьте на нулевое значение перед вызовом функции и запустите блок if ($ reference! == NULL). или вы можете разделить функцию на две отдельные функции, одну, если $ reference равна нулю, а другую для $ reference, указывающую на что-то.

0

По вопросам рекламы [email protected]