PHP7的一些新特性

①:支持函数的强制参数类型指定,如:

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));  // int(9)

②:返回类型也在强制进行规定,如:

<?php

function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

/*
打印:
Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)
*/

// 强制模式    
<php 
    function foo($a) : int 
    { 
        return $a; 
    } 
     
    foo(1.0); 

// 严格模式
<php 
declare(strict_types=1); 
 
function foo($a) : int 
{ 
    return $a; 
} 
 
foo(1.0);
注:

使用返回值类型声明时,如果没有声明为严格模式,如果返回值不是预期的类型,PHP 还是会对其进行强制类型转换。但是如果是严格模式, 则会出发一个 TypeError 的 Fatal error。

③:比较的时候支持<=> 可以比较字符串,数组,整型,它返回的值有-1,0,1三种,下面看具体代码:

<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
④:define定义常量不仅仅只支持标量,还支持了数组

<?php
define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // outputs "cat"
?>

⑤:运算符(NULL 合并运算符)

$a = $_GET['a'] ?? 1;

它相当于:

<php
$a = isset($_GET['a']) ? $_GET['a'] : 1;

我们知道三元运算符是可以这样用的:

$a ?: 1

但是这是建立在 $a 已经定义了的前提上。新增的 ?? 运算符可以简化判断。

⑥:成员方法中也可以规定必须要返回某个类类型

<?php
class A {}
class B extends A {}

class C
{
    public function test() : A
    {
        return new A;
    }
}
⑦:新建了call方法在外部来调用,更短的方式将匿名函数,追加进对象中且完成调用

<?php
class A {private $x = 1;}

// Pre PHP 7 code
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, 'A'); // intermediate closure
echo $getX();

// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new A);

/*
打印:
1
1
*/

其他特性,有兴趣的可以查看官方文档:http://php.net/manual/en/migration70.new-features.php




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章