速记三元运算符 PHP - 在 null 上调用成员函数



给定类:

<?php
class foo {
public function getGuest() {
return new guest();
}
}
class guest {
public function getGender() {
return 'F';
}
}

我想重构以下内容,它工作正常:

$bar->getGuest() ? $bar->getGuest()->getGender() : NULL

自:

$bar->getGuest() ?: $bar->getGuest()->getGender()

我得到错误的地方:在 null 上调用成员函数 getGender((

我期望它以与顶级版本相同的方式工作,因为我的理解是,如果左手边是真实的,则归还左手,否则归还右手。 那么,如果左手是假的,为什么右手在跑呢? 有人可以解释一下吗?

鉴于第二个版本不起作用,顶级版本是最简洁的吗?

来自 PHP 手册:

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

让我们看看你在这里要做什么:

$bar->getGuest() ?: $bar->getGuest()->getGender()

其工作方式是,如果第一个$bar->getGuest()表达式等于true,则操作将返回$bar->getGuest()本身的值。这应该工作正常,没有错误。

但是,如果$bar->getGuest()返回其他内容(例如null( 它将运行第三个表达式,即$bar->getGuest()->getGender()

好吧,我们已经确定$bar->getGuest()返回了null,那么如何->getGender()null值上运行另一个方法呢?你不能,这就是你收到错误的原因。


保持代码的可读性和简单性并没有错。您可能希望存储初始方法调用值,因此不必再次调用它来运行getGender()

$guest = $bar->getGuest();
$gender = ($guest === null) ? null : $guest->getGender();

最新更新