我有一个对象:
$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(),
];
这是正确的方法吗?
答案 0 :(得分:1)
最好使用ternary operator shortcut。
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
这样env()
函数只会调用一次(而不是两次):
$info = [
'last_name' => env('ADMIN_LAST_NAME', null) ?: $this->askForLastName(),
];
除非''
,null
或false
是有效的管理员姓氏,否则它会正常工作。
答案 1 :(得分:1)
该代码应该有效,但可以改进。
首先,由于true子句没有替代案例,您可以使用简写三元运算符。
['last_name' => env('ADMIN_LAST_NAME', NULL) ?: $this->askForLastName()']
;
此外,虽然对于if子句,null值将返回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]
。
这是代码风格和偏好的问题。只需在整个代码库中保持一致。