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




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