php 7 新特性整理小結

php 7 比php 5 性能提高了不少,php 7 新特性主要表如今:一、變量存儲字節減少,減小內存佔用,提高變量操做速度;二、改善數組結構,數組元素和hash映射表被分配在同一塊內存裏,下降了內存佔用、提高了 cpu 緩存命中率;三、改進了函數的調用機制,經過優化參數傳遞的環節,減小了一些指令,提升執行效率。下面就隨ytkah一塊兒看看php 7 新特性有哪些吧。php

PHP 7 新功能小結數組

  • 改進的性能 - 將PHPNG代碼合併到PHP7中,速度是PHP 5的兩倍。
  • 下降內存消耗 - 優化的PHP 7使用較少的資源。
  • 標量類型聲明 - 如今能夠強制執行參數和返回類型。
  • 一致的64位支持 - 對64位體系結構機器的一致支持。
  • 改進了異常層次 - 異常層次獲得了改進
  • 許多致命的錯誤轉換爲例外 - 例外範圍增長,涵蓋許多致命的錯誤轉換爲例外。
  • 安全隨機數發生器 - 增長新的安全隨機數發生器API。
  • 已棄用的SAPI和擴展已刪除 - 各類舊的和不受支持的SAPI和擴展從最新版本中刪除。
  • 空合併運算符(?) - 添加了新的空合併運算符。
  • 返回和標量類型聲明 - 支持所添加的返回類型和參數類型。
  • 匿名類 - 支持匿名添加。
  • 零成本斷言 - 支持零成本斷言增長。

  php 7 新特性緩存

標量類型聲明

  標量類型聲明 有兩種模式: 強制 (默認) 和 嚴格模式。 如今可使用下列類型參數(不管用強制模式仍是嚴格模式): 字符串(string), 整數 (int), 浮點數 (float), 以及布爾值 (bool)。它們擴充了PHP5中引入的其餘類型:類名,接口,數組和 回調類型。安全

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));
?>

  以上實例會輸出:int(9)app

  要使用嚴格模式,一個 declare 聲明指令必須放在文件的頂部。這意味着嚴格聲明標量是基於文件可配的。 這個指令不只影響參數的類型聲明,也影響到函數的返回值聲明(參見 返回值類型聲明, 內置的PHP函數以及擴展中加載的PHP函數)函數

返回值類型聲明

PHP 7 增長了對返回類型聲明的支持。 相似於參數類型聲明,返回類型聲明指明瞭函數返回值的類型。可用的類型與參數聲明中可用的類型相同。性能

<?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
)

null合併運算符

因爲平常使用中存在大量同時使用三元表達式和 isset()的狀況, 咱們添加了null合併運算符 (??) 這個語法糖。若是變量存在且值不爲NULL, 它就會返回自身的值,不然返回它的第二個操做數。ui

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

太空船操做符(組合比較符)

太空船操做符用於比較兩個表達式。當$a小於、等於或大於$b時它分別返回-一、0或1。 比較的原則是沿用 PHP 的常規比較規則進行的。this

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

// 浮點數
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>

經過 define() 定義常量數組

Array 類型的常量如今能夠經過 define() 來定義。在 PHP5.6 中僅能經過 const 定義。

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

echo ANIMALS[1]; // 輸出 "cat"
?>

匿名類

如今支持經過new class 來實例化一個匿名類,這能夠用來替代一些「用後即焚」的完整類定義。

<?php
interface Logger {
    public function log(string $msg);
}

class Application {
    private $logger;

    public function getLogger(): Logger {
         return $this->logger;
    }

    public function setLogger(Logger $logger) {
         $this->logger = $logger;
    }
}

$app = new Application;
$app->setLogger(new class implements Logger {
    public function log(string $msg) {
        echo $msg;
    }
});

var_dump($app->getLogger());
?>

  以上例程會輸出:

object(class@anonymous)#2 (0) {
}

  更多php 7 新特性請參考http://php.net/manual/zh/migration70.new-features.php

相關文章
相關標籤/搜索