PHP三元运算符对象赋值

时间:2016-06-29 14:53:26

标签: php

我有一个对象:

$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(),
];

这是正确的方法吗?

2 个答案:

答案 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(),
];

除非''nullfalse是有效的管理员姓氏,否则它会正常工作。

答案 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]

这是代码风格和偏好的问题。只需在整个代码库中保持一致。