作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常遇到变量可以是object
的情况或 null
.
当我将数据放入数据库时,我必须坚持这样的事情:
// @var User|null $user
$data['id_user'] = $user!==null ? $user->getId() : null;
??
,但这有点相反。
最佳答案
从 PHP 8 开始,有 nullsafe operator ?->
.有了它,你可以像这样重构你的代码:
// @var User|null $user
$data['id_user'] = $user?->getId();
在 PHP 8 之前,您可以利用自动 bool 转换来利用以下事实:
when converting to bool, null is considered false ,但其他对象不是(除了显然从空标签创建的 SimpleXML 对象也被认为是假的)。因此,您可以将示例缩短为以下内容:
// @var User|null $user
$data['id_user'] = $user ? $user->getId() : null;
但是,这可能不太可读,因为 ?可能对某些人来说,您开始使用 bool 来工作,或者它可能使读者不得不考虑如何将 null 转换为 bool。您的原始代码更明确,因此可能更具可读性。为了让大脑不那么辛苦,我经常至少考虑尽可能避免使用“不等于”,而直接使用“等于”。因此,您可以将代码重构为如下所示:
// @var User|null $user
$data['id_user'] = $user === null ? null : $user->getId();
在这种特殊情况下,我认为这个技巧(避免“不等于”)效果很好,但有时与直觉相反,代码仍然更自然地可读,无论如何只使用“不等于”。
关于PHP:是否有空合并运算符的反面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257931/
我怎样才能做 git submodule absorbgitdirs 的反向操作? ? IE。移动子模块的 .git信息出superproject/.git/modules/然后回到 superpro
(注意:有一些类似的问题,但我找不到完全重复的问题) 问题 考虑抛硬币任意次数。在得到 3 个反面之前得到 2 个正面的概率是多少? 代码 为了模拟这一点,我设置了 10000000 次试验,其中 0
我是一名优秀的程序员,十分优秀!