【问题标题】:Why I can't use isset() with laravel $request->input('key')为什么我不能在 laravel $request->input('key') 中使用 isset()
【发布时间】:2018-06-12 14:17:08
【问题描述】:

这两个sn-ps是一样的

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 时,我的问题是一样的吗?为什么它在第二次尝试而不是在第一次尝试中运行.. 有什么区别?

【问题讨论】:

  • 好的,我可以使用 $request->has('optionId') 。它有助于 。但它没有回答问题
  • 这就是为什么我从未发布答案,而是发表评论,因为它解决了应该如何做而不是您的实际问题。
  • @NuOneTAttygalle 也回答了你的问题。

标签: php laravel post laravel-5 get


【解决方案1】:

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

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

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

参考:isset()

【讨论】:

  • syntax 错误改回parse 错误,因为文档清楚地表明了这一点。我已经从字面上复制粘贴了它。如果您仍然认为您的建议是正确的,请继续在 PHP 文档中提出更改建议,这将对很多人有所帮助。 :)
  • 由于语法错误而发生解析错误。当我编码时,ide 警告语法错误。当编译器尝试解析有语法错误的代码时,结果将是解析错误。所以在解释性语言中,(PHP、ASP 等)代码运行时会发生解析错误,因为它是同时编译和运行的。所以语法和解析这两个错误都发生在这个上下文中
【解决方案2】:

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

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

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

summary is -> 解析器负责处理语言构造函数,内置函数在解析之前被映射并简化为一组语言构造。

【讨论】:

  • 是的,isset 只是另一种语言结构,就像 if、echo、die 和 return。能够将echo 称为echo() 会让人们感到困惑,让他们认为自己是函数
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2022-01-27
    • 2010-09-30
    相关资源
    最近更新 更多