PHP怪异语法-它叫什么


PHP Weird Syntax - What is it called?

我一直在关注一个关于PHP框架的视频系列,我遇到了一个奇怪的结构。我只是想知道它叫什么,这样我就可以多读一些了。在视频中,扬声器给出了这个代码

public function edit($id = NULL)
{
   $id == NULL || $this->data['user'] = $this->user_m->get($id);
   ...
}

他说,如果调用者没有传递id,那么$id将设置为null,如果传递了$id,则用户将从数据库中检索并保存在数据数组中。

问题是,这是一个条件语句,但它不在if或while之类的语句中。我以前从未见过。我搜索过内联或循环/if语句外的条件语法,但没有成功。正如我所说,我想了解更多关于它的信息,并了解它是一个通用的PHP特性还是特定于框架的特性。

谢谢。

sytnax被称为"短路评估",是大多数编程语言中使用的优化技术。只有当左表达式为false时,才会对||的右表达式求值,因为否则,结果不取决于右表达式的值(因为只有当左公式为true时,才会评估&&的右表达式(。

您可以将您的示例重写为($id == NULL) || ($this->data['user'] = $this->user_m->get($id));以使其更加清晰。仅当$id不是NULL时,才计算赋值表达式。

然而,这行代码是一个很难维护的代码的完美例子,因为你需要花很多时间思考它的作用…:(

要创建这个问题的正确答案,我们必须首先说,您的函数语法中可能存在错误(我会说可能,因为我仍然不能100%确定(:

public function edit($id == NULL)

应该是:

public function edit($id = NULL)

这对代码的其余部分完全有意义,因为如果不设置,它会将局部变量ID设置为NULL,否则它会设置它。

也就是说,其余的,正如评论中所说,只是一个OR逻辑运算(好吧,不管你想怎么说,我习惯于把它解释为三元运算符,因为如果有人不知道它是如何工作的,它会稍微容易一些(,我只是觉得我应该指出,这与许多其他语言不同,在PHP中,您可以直接在逻辑运算的第二个或第三个参数中计算变量。

简而言之,您的操作:

$id == NULL || $this->data['user'] = $this->user_m->get($id);

也可以写成:

if ($id !== null) {
   $this->data['user'] = $this->user_m->get($id);
}

当然,这是可读的,否则,你也可以这样做:

$id !== NULL && $this->data['user'] = $this->user_m->get($id);

甚至:

$this->data['user'] = $id !== NULL ? $this->user_m->get($id) : $this->data['user'];

基本的三元运算符是:

condition ? iftrue : iffalse

您的"变体"是一种逻辑运算的"使用",称为短路评估,事实上,OR逻辑运算符仅在左手运算符不正确时评估右手运算符,因此:

$id == NULL || $this->data['user'] = $this->user_m->get($id);

$id == NULL<--左手操作员

$this->data['user'] = $this->user_m->get($id)<--右侧操作员

如上所述,如果$id==NULL为false(也就是说,如果$id不为NULL(,则执行右手运算符,因此将$this->data['user']设置为$this->user_m->get($id(,否则什么都不做。