为什么我不能将isset()与laravel $ request-> input('key')

时间:2018-06-12 14:17:09

标签: php laravel post laravel-5 get

这两个片段是相同的

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   !==表达“代替”“

但第二个正在执行。

我的问题是它分配给$ optionId时的问题是对的吗?为什么它在第二次尝试中运行而不是在第一次尝试中..有什么区别?

3 个答案:

答案 0 :(得分:2)

您可以改为使用$request->has('optionId')

为了回答您的实际问题,PHP文档已经警告过它。

  

isset()仅适用于变量,因为传递任何其他内容都会产生   解析错误

参考:isset()

答案 1 :(得分:1)

我挖了一些,发现了真正的原因。想分享......

isset()不是一个功能。它是一种语言结构。 语言结构是语言的构建块。他们很难进入解析器。所以我们无法重新定义那些。因此,isset()很难进入解析器以仅接受变量。这就是为什么任何陈述都无法解析为isset()。如果这就是Syntax error

的原因 另一方面,

函数已映射到一组语言结构。解析器允许在编译或运行时更改该映射。

摘要是 - >解析器是处理语言构造函数的人,在解析之前,内置函数被映射并简化为一组语言结构。

答案 2 :(得分:0)

因为您使用的是PHP 5.6+版本,所以isset()支持的表达式仅在5.6版本之后起作用