Почему я не могу использовать isset () с laravel $ request-> input ('key') - PullRequest
0 голосов
/ 12 июня 2018

Эти два фрагмента одинаковы

1)

if(isset($request->input('optionId'))){
  ....
  ....
  ....
  // statements will go here 
}

2)

$optionId = $request->input('optionId');

if(isset($optionId)){
  ....
  ....
  ....
  // statements will go here 
}

при первой попытке IDE сообщает о синтаксической ошибке.Когда я сохранил его и запустил, интерпретатор говорит

"Невозможно использовать isset () для результата выражения (вместо этого вы можете использовать" null! == expression ")"

но второй выполняется нормально.

Мой вопрос такой же, когда он назначен на $ optionId right?Почему он работает со второй попытки, а не с первой? В чем разница?

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Поскольку вы используете версию PHP 5.6+, выражения поддерживаются для функции isset() только с версий 5.6

0 голосов
/ 12 июня 2018

Я копаю немного и нашел реальную причину.Мысль поделиться ...

isset() не является функцией.это языковая конструкция.Языковые конструкции являются строительными блоками языка.они жестко привязаны к парсеру.поэтому мы не можем переопределить их.Таким образом, isset() жестко привязан к парсеру и принимает только переменные.Вот почему никакие операторы не могут проанализировать isset().Если это так, то причина для функций Syntax error

с другой стороны сопоставлена ​​с набором языковых конструкций.parser позволяет изменить это отображение во время компиляции или во время выполнения.

summary is -> parser - это тот, кто имеет дело с языковыми конструкторами , а встроенные функции отображаются и упрощаются до набораязыковых конструкций перед разбором.

0 голосов
/ 12 июня 2018

Вместо этого вы можете использовать $request->has('optionId').

И чтобы ответить на ваш вопрос, PHP Documentation уже предупредила об этом.

isset () работает только с переменными при передачевсе остальное приведет к ошибке разбора

Ссылка: isset ()

...