溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP7.x中每一個版本的新特性是什么

發(fā)布時間:2021-06-07 09:56:45 來源:億速云 閱讀:92 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“PHP7.x中每一個版本的新特性是什么”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“PHP7.x中每一個版本的新特性是什么”這篇文章吧。

PHP 7.0

標(biāo)量類型聲明

什么是標(biāo)量類型?

四種標(biāo)量類型:

boolean (布爾型)

integer (整型)

float (浮點型, 也稱作 double)

string (字符串)

兩種復(fù)合類型:

array (數(shù)組)

object (對象)

資源是一種特殊變量,保存了到外部資源的一個引用。資源是通過專門的函數(shù)來建立和使用的。資源類型變量為打開文件、數(shù)據(jù)庫連接、圖形畫布區(qū)域等的特殊句柄。

說的通俗一點,標(biāo)量類型,就是定義變量的一個數(shù)據(jù)類型。

在php5中,有類名,接口,數(shù)組 和回調(diào)函數(shù)。在php中,增加了 符串(string), 整數(shù) (int), 浮點數(shù) (float), 以及布爾值 (bool)。下面我們來舉例子,萬事萬物看例子

function typeInt(int $a)
{
    echo $a;
}

typeInt('sad');
// 運行,他講會報錯 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given

在這里,我們定義了$a 必須為int類型,如果 type 函數(shù)里面?zhèn)髁藄tring 所以報錯。讓我們修改上述的代碼就沒錯了

function typeString(string $a)
{
    echo $a;
}

typeString('sad'); 
//sad

返回值類型聲明

關(guān)于函數(shù)的方法返回值可以定義,比如我某個函數(shù)必須要返回 int 類型,他就定死來返回 int ,如果你返回 string 則報錯。如下

<?php

function returnArray(): array
{

    return [1, 2, 3, 4];
}

print_r(returnArray());
/*Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/

那當(dāng)我們的定義了數(shù)組,返回了string或者其他類型呢?

那么他將會報錯 比如

function returnErrorArray(): array
{

    return '1456546';
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/

null 合并運算符

由于日常使用中存在大量同時使用三元表達式和 isset()的情況, 我們添加了null合并運算符 (??) 這個語法糖。如果變量存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個操作數(shù)。

<?php

$username = $_GET['user'] ?? 'nobody';
//這兩個是等效的  當(dāng)不存在user 則返回?? 后面的參數(shù)

$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

?>

太空船操作符

// 整數(shù)
echo 1 <=> 1; // 0 當(dāng)左邊等于右邊的時候,返回0
echo 1 <=> 2; // -1  當(dāng)左邊小于右邊,返回-1
echo 2 <=> 1; // 1  當(dāng)左邊大于右邊,返回1

// 浮點數(shù)
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 定義數(shù)組

在PHP7 以前的版本 define 是不能夠定義數(shù)組的 現(xiàn)在是可以的 比如

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

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

use 方法批量導(dǎo)入

// PHP 7 之前的代碼
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP 7+ 及更高版本的代碼
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

###Unicode codepoint 轉(zhuǎn)譯語法

echo "\u{aa}"; //a
echo "\u{0000aa}";  //a  
echo "\u{9999}"; //香

匿名類

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

PHP 7.1

可為空類型

參數(shù)以及返回值的類型現(xiàn)在可以通過在類型前加上一個問號使之允許為空。 當(dāng)啟用這個特性時,傳入的參數(shù)或者函數(shù)返回的結(jié)果要么是給定的類型,要么是 null 。

<?php

function testReturn(): ?string
{
    return 'elePHPant';
}

var_dump(testReturn()); //string(10) "elePHPant"

function testReturn(): ?string
{
    return null;
}

var_dump(testReturn()); //NULL

function test(?string $name)
{
    var_dump($name);
}

test('elePHPant'); //string(10) "elePHPant"
test(null); //NULL
test(); //Uncaught Error: Too few arguments to function test(), 0 passed in...

void

增加了一個返回void的類型,比如

<?php
function swap(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

多異常捕獲處理

這個功能還是比較常用的,在日常開發(fā)之中

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 來捕獲FirstException異常,或者SecondException 異常
  
}

PHP 7.2

PHP7.2是PHP7系列 最少的新特性了

###允許分組命名空間的尾部逗號

比如

<?php

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};

允許重寫抽象方法

<?php

abstract class A
{
    abstract function test(string $s);
}
abstract class B extends A
{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;
}

新的對象類型

<?php

function test(object $obj) : object  //這里 可以輸入對象
{
    return new SplQueue();
}

test(new StdClass());

PHP 7.3

PHP7.3 在語法層面沒有什么很大的改變。

PHP 7.4

類屬性支持類型聲明

恭喜 PHP 往強類型又邁了一步

<?php
class User {
    public int $id;
    public string $name;
}
?>

箭頭函數(shù)

箭頭函數(shù)提供了用于使用隱式按值作用域綁定定義函數(shù)的簡寫語法。與 JS 的箭頭函數(shù)差不多,不過要帶個 fn。吐槽一波

<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>

Null 合并運算符支持方法

<?php
$array['key'] ??= computeDefault();
// 類似與這個
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
?>

以上是“PHP7.x中每一個版本的新特性是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI