【发布时间】:2023-03-29 09:01:01
【问题描述】:
给定班级:
<?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()
我希望它以与顶级版本相同的方式工作,因为我的理解是,第二个版本是,如果左侧是真实的,则返回左侧,否则返回右侧。那么,如果左手是假的,为什么右手会跑呢?有人可以解释一下吗?
第二个版本不行,是不是上个版本最简洁?
【问题讨论】:
-
第一个例子不能正常工作——只是你被保护免受错误,因为条件永远不会解析为真,因此三元条件的左侧永远不会运行。
getGender()不是null的方法,这是getGuest()返回的。 -
对不起,为了这个问题,我做了一点简化,实际上,有一种情况 getGuest 不为空,
getGuest()->getGender()运行良好。但如果 getGuest 为 null,那么我想返回 NULL -
所以请更新问题以包含所有相关代码,包括
getGuest()和getGender()的完整定义。