繁体   English   中英

为什么我不能在Laravel $ request-> input('key')中使用isset()

[英]Why I can't use isset() with laravel $request->input('key')

这两个片段是相同的

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对吗? 为什么它在第二次尝试中运行而不在第一次尝试中..有什么区别?

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

为了回答您的实际问题,PHP文档已经对此进行了警告。

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

参考: isset()

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

isset()不是函数。 它是一种语言构造。 语言构造是语言的组成部分。 它们被硬连接到解析器中。 所以我们不能重新定义它们。 因此isset()很难解析器接受,只接受变量。 这就是为什么任何语句都无法解析为isset() 如果那是Syntax error的原因

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM