小编说:PHP 7中引入了两个非常有意思的操作符。这两个操作符可以让我们用更简单的代码实现与复杂代码相同的功能,并且让代码更加清晰易懂,更具可读性。下面,一起来看看这两个新的操作符。 本文选自《高性能PHP 7》。
太空飞船操作符在比较变量时非常有用,这里说的变量包括数值(字符串型、整型、浮点型等)、数组、对象。这个操作符将三个比较符号(==、<、>)打包在了一起,可以用于书写清晰易读的用于usort、uasort、uksort的回调函数,具体使用规则如下。
用下面的例子来比较整型、字符串型、对象与数组。
$int1 = 1;
$int2 = 2;
$int3 = 1;echo $int1 <=> $int3; //返回0
echo '<br>';
echo $int1 <=> $int2; //返回-1
echo '<br>';
echo $int2 <=> $int3; //返回1
执行这段代码得到的结果如下。
0
-1
1
在第一个比较式中,因为int1与int3相等,所以返回值是0。在第二个比较式中,因为右参(int2)大于左参(int1),所以返回值是1。对于最后一个比较式,因为左参(int2)大于右参(int3),所以返回值是1。
上面的例子告诉我们如何使用太空飞船操作符来对整形数进行比较。同样地,我们也可以用这个操作符来对比字符串、对象、数组,这些类型的比较都基于标准的PHP比较方式。
想要了解一些用太空飞船操作符进行比较的例子可以查阅https://wiki.php.net/rfc/combined-comparison-operator。这是一份相当有用的RFC文档。
这个操作符在进行数组排序时是非常有用的。一起来看下面这个例子。
Function normal_sort($a, $b) : int
{
if( $a == $b )
return 0;
if( $a < $b )
return -1;
return 1;
}
function space_sort($a, $b) : int
{
return $a <=> $b;
}
$normalArray = [1,34,56,67,98,45];// 对数组进行升序排序
usort($normalArray, 'normal_sort');foreach($normalArray as $k => $v)
{
echo $k.' => '.$v.'<br>';
}
$spaceArray = [1,34,56,67,98,45];//通过太空飞船操作符对数组进行排序
usort($spaceArray, 'space_sort');foreach($spaceArray as $key => $value)
{
echo $key.' => '.$value.'<br>';
}
在这段代码中,我们用两个函数来对数组进行排序,被排序的数组内容一样,但属于不同的变量。normalArray数组要用normal_sort函数来排序,normal_sort函数使用if判断式来判断数值大小。另一个数组spaceArray与数组
想必大家都知道三元运算符,我们常常会用到它。三元运算符只需一行代码就可以实现if-else的功能。例如下面这样。
$post = ($_POST['title']) ? $_POST['title'] : NULL;
如果_POST[‘title’]存在,post变量便会被赋上它的值;如果不存在,post就会被赋值为NULL。然而,如果_POST、
$post = isset($_POST['title']) ? $_POST['title'] : NULL;
这样便可以解决报错,但同时带来一个棘手问题——如果我们要在多处进行这样的校验,就要写很多这样的代码,特别是在写PHP的模板语言时,问题突显。
在PHP 7中,推荐使用合并运算符,在第一操作数存在时可被直接返回,不然则返回第二操作数。具体使用方法如下。
$post = $_POST['title'] ?? NULL;
这行示例代码与前面的代码功能是一样的。合并运算符检查_POST[‘title’]是否存在,如果存在则返回_POST[‘title’],否则返回NULL。
合并运算符的另一个好处是可以连续使用。
$title = $_POST['title'] ?? $_GET['title'] ?? 'No POST or GET’;
上面这行代码执行时会先检查第一操作数是否存在,若存在则直接返回,若不存在便检查第二操作数。此时第二个合并操作符开始生效,它会检查第二操作数是否存在,若存在则返回,若不存在则会返回右边的值。
如果用老式代码实现,则如下。
if(isset($_POST['title']))
$title = $_POST['title'];
elseif(isset($_GET['title']))
$title = $_GET['title'];
else
$title = 'No POST or GET’;
通过上面的例子,我们可以看到,合并操作符能让代码更加精简,减少代码量。