2016-12-14 2 views
0

У меня проблема, когда я пытаюсь вызвать функцию, которая ожидает ссылку в качестве параметра. Функция работает совершенно нормально, когда я передаю ей какую-либо переменную, однако, если я передаю ей переменную с помощью средства? и: if/else операторов, я получаю ошибку Cannot pass parameter 1 by reference.PHP передать переменную по ссылке, используя?: Операторы

Функция выглядит следующим образом:

public function testFunction(&$var) { 
    //It does nothing. 
} 

Теперь я пытаюсь вызвать функцию следующим образом:

$yes = 'yes'; 
$no = 'no'; 

$this->testFunction(
    TRUE ? $yes : $no 
); 

Однако если я $this->testFunction($yes) это делает работу. Что я здесь делаю неправильно? Могу ли я использовать '?' и ':' для этого, и если нет, то каковы мои альтернативы, чтобы убедиться, что testFunction получит ссылку на правильные данные?

+2

Это потому, что вы не передавая переменную, но его значение .. поэтому выражение си оценивается первым и переданный аргумент является строкой, а не переменной –

ответ

2

Это потому, что вы не передаете переменную, а ее значение вместо этого. Выражение si сначала оценивается, а переданный аргумент - это строка, а не переменная.

Вы можете сделать это, как это вместо:

$yes = 'yes'; 
$no = 'no'; 

if (true) { 
    $this->testFunction($yes); 
} else { 
    $this->testFunction($no); 
} 
+0

Или просто определить переменную '$ boolean = true? $ yes: $ no; ', а затем передать его функции' $ this-> testFunction ($ boolean); ' – Yupik

+1

Вы можете это сделать, но пройденная ссылка будет ссылкой' $ boolean' вместо '$ yes' или '$ no'. Поэтому, если вы хотите повлиять на любую из этих двух переменных внутри функции, это не сработает –

+1

О, я предположил, что после ее вычисления просто поместит вместо переменной значение. Я надеялся, что мне не нужно было делать фактическое if/else, но просто выполнить оценку внутри вызова функции. – QuestionsAlot

Смежные вопросы