繁体   English   中英

PHP三元运算符对象分配

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

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

该代码应该可以工作,但是可以对其进行改进。

首先,由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM