【发布时间】:2019-06-12 22:50:56
【问题描述】:
我经常遇到变量可以是object 或null 的情况。
当我将数据放入数据库时,我必须坚持这样的做法:
// @var User|null $user
$data['id_user'] = $user!==null ? $user->getId() : null;
有什么办法可以缩短这个吗?我知道??,但这有点相反。
我使用的是 PHP 7.1。
【问题讨论】:
-
stackoverflow.com/q/1993409/534109 - 你正在寻找猫王操作员
-
这在这种情况下不会完全有效,但会吗? Elvis 运算符等效于
$user ? $user : null;(因此将分配$user而不是$user->getId()) - 如果$user对象本身是null,您不想执行$user->getId() ?: null(因此在null) 上调用方法...嗯嗯嗯。非常感谢。 -
如果
$user未定义,Elvis 运算符也会生成 E_NOTICE。 -
实际上,您现有的代码也会生成 E_NOTICE,您可能应该使用类似:
isset($user) ? $user->getId() : null; -
^ 或者对于超级谨慎的人来说,
isset()、is_object()和method_exists()... O_o ... Barmar 的解决方案/hack(取决于视角)看起来更好分钟。
标签: php null ternary-operator php-7.1