[英]PHP ternary operator object assignment
我有一个对象:
$info = [
'last_name' => $this->askForLastName(),
];
我正在尝试读取env('ADMIN_LAST_NAME',null)形式的环境变量,并尝试使用三元运算符,以便仅在env变量不存在时才应调用该函数。
例如:
$info = [
'last_name' => env('ADMIN_LAST_NAME', null)? env('ADMIN_LAST_NAME', null) : $this->askForLastName(),
];
这是正确的方法吗?
使用三元运算符快捷方式可能会更好。
从PHP 5.3开始,可以省略三元运算符的中间部分。 如果expr1的计算结果为TRUE,则表达式expr1?:expr3返回expr1,否则返回expr3。
这样, env()
函数将仅被调用一次(而不是两次):
$info = [
'last_name' => env('ADMIN_LAST_NAME', null) ?: $this->askForLastName(),
];
除非''
, null
或false
是有效的管理员姓氏,否则它将正常工作。
该代码应该可以工作,但是可以对其进行改进。
首先,由于true子句没有其他情况,因此可以使用简写三元运算符。
['last_name' => env('ADMIN_LAST_NAME', NULL) ?: $this->askForLastName()']
;
此外,尽管对于if子句,空值将返回false,但它不是非常准确或特定。 如果要显式检查空值,请使用is_null
。 如果要为null或false,请使用empty
。 在这种情况下,您将无法使用速记,因为true / false子句都必须返回一个单独的实体。
['last_name' => is_null(env('ADMIN_LAST_NAME', NULL)) ? $this->askForLastName() : env('ADMIN_LAST_NAME', NULL)]
您可以摆脱对env的多次调用,从而进一步向前迈进。
['last_name' => is_null(($adminLastName = env('ADMIN_LAST_NAME', NULL))) ? $this->askForLastName() : $adminLastName]
['last_name' => is_null(($adminLastName = env('ADMIN_LAST_NAME', NULL))) ? $this->askForLastName() : $adminLastName]
。
这是代码风格和首选项的问题。 只要在整个代码库中保持一致即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.