PHP简写三目运算符实现二选一技术
maybe yes 发表于2015-09-21 00:08
原文链接 : http://blog.lmlphp.com/archives/145/Shorthand_TRINOCULAR_operators_in_PHP_to_realize_a_second_election_alternative 来自 : LMLPHP后院
写 过 PHP 的人应该都知道,PHP 中的逻辑运算符与或非计算后返回的值都是布尔值 true 或 false。而在其他的语言中,比如 JavaScript 和 Python 中,或运算(||) 会返回两者中的一个,是二选一。由于习惯了 JavaScript 的那种或运算的写法,导致一次我在将 Python 业务代码移植到 PHP 中时写出了一个 BUG。
看下面的 JavaScript 代码:
var name = obj.name || 'Anonymous'; var callback = obj.callbackFunc || function(){};
在 JS 中,上面的写法非常常见。它和 Python 一样,或运算返回的是二选一。如果要在 PHP 中实现二选一,是不可以那样写的。很久以前也看到过三目运算的简写,之后再也没见到过那种写法,真的太少见,最近一次看到,让我觉得有点陌生。
在 PHP 中,可以使用三目运算符简写的方式实现二选一,如下示例:
$name = $obj->name ?: 'Anonymous';
好的程序员应该写出好的代码,好的代码就应该选择一种最好的方式来写,而不是去写一些很奇怪的东西,这样容易造成别人的误解,特别是团队开发。
比如,在 PHP 中,我们一般习惯用 isset() 来判断是否有设置值,但有些人会使用 @ 符号来屏蔽报错,其实这样是不规范的,屏蔽 Notice 错误对系统架构来讲是不健康的。如下所示:
$name = @$_GET['name'];
上面的代码系不规范的,也是极不提倡的,应该写成下面的方式:
$name = isset($_GET['name']) ? $_GET['name'] : '';
// 等价于 PHP 7 新写法 $name = $_GET['name'] ?? '';