溫馨提示×

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

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

PHP類型聲明特性實(shí)例分析

發(fā)布時(shí)間:2022-05-10 15:52:13 來(lái)源:億速云 閱讀:133 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“PHP類型聲明特性實(shí)例分析”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“PHP類型聲明特性實(shí)例分析”文章能幫助大家解決問(wèn)題。

PHP類型聲明特性實(shí)例分析

最近在研究PHP7的新特性,發(fā)現(xiàn)PHP也開(kāi)始搞類型聲明了,這么做的好處很明顯:能提高程序運(yùn)行速度。

下面開(kāi)始介紹這一新特性:

默認(rèn)情況下,所有的PHP文件都處于弱類型校驗(yàn)?zāi)J健?/p>

PHP7+增加了類型聲明的特性,類型聲明有兩種模式:

  • 強(qiáng)制模式 (默認(rèn)模式) 我的理解就是強(qiáng)制轉(zhuǎn)換成需要的類型,不嚴(yán)格區(qū)分類型而是強(qiáng)轉(zhuǎn),類型不一致不報(bào)錯(cuò)

  • 嚴(yán)格模式 嚴(yán)格校驗(yàn)類型,類型與聲明的不一致,報(bào)錯(cuò)

標(biāo)量類型聲明語(yǔ)法格式:

declare(strict_types=1);

其中strict_types的值:

  • 1表示嚴(yán)格類型校驗(yàn)?zāi)J?,作用于函?shù)調(diào)用和返回語(yǔ)句;

  • 0表示弱類型校驗(yàn)?zāi)J?/p>

可以使用的類型參數(shù)有:

  • string

  • int

  • float

  • bool

  • interfaces

  • array

  • callable

強(qiáng)制模式(默認(rèn)模式)

<?php

function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(1, '2', 3.1));
?>

以上程序執(zhí)行輸出結(jié)果為:6

分析一下即:將字符串類型的'2'轉(zhuǎn)換成整型的2,將float類型的3.1轉(zhuǎn)換為整型的3后再相加,得出結(jié)果6。

嚴(yán)格模式

<?php

declare(strict_types=1);

function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(1, '2', 3.1));
?>

以上程序因?yàn)椴捎昧藝?yán)格模式,因?yàn)榈诙€(gè)參數(shù)不是int類型,執(zhí)行結(jié)果報(bào)錯(cuò)如下:

PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……

返回類型聲明

PHP7+ 增加了對(duì)返回類型聲明的支持,返回類型聲明指明了函數(shù)返回值的類型。

可以聲明的返回類型有:

  • string

  • int

  • float

  • bool

  • interfaces

  • array

  • callable

我踩的坑

這里我還真趟過(guò)坑,在新版本的phpstorm中會(huì)根據(jù)返回值類型出現(xiàn)提示代碼,引導(dǎo)添加返回類型聲明,我就加上了。但是后面因?yàn)闃I(yè)務(wù)的變化或者代碼優(yōu)化只修改了返回值(比如之前返回的是array,修改后返回了int),卻忘記了修改返回類型聲明(畢竟習(xí)慣了PHP弱語(yǔ)言類型這么多年了...),這樣是會(huì)拋出異常導(dǎo)致報(bào)錯(cuò)的,這就是我踩到的坑,小伙們們?cè)谑褂眠^(guò)程中要注意。

思考

GO語(yǔ)言是不會(huì)出現(xiàn)我上面說(shuō)的問(wèn)題的, 因?yàn)槿绻祷刂殿愋秃头祷仡愋吐暶魇蔷幾g不通過(guò)的,編譯的時(shí)候就會(huì)報(bào)錯(cuò)。

而PHP作為弱類型語(yǔ)言,雖然做了返回類型聲明這種優(yōu)化,但是語(yǔ)言執(zhí)行前不需要我們編譯,直接發(fā)布運(yùn)行,也就不能做到go語(yǔ)言的“編譯報(bào)警”了,PHP會(huì)在執(zhí)行的時(shí)候直接拋出異常。

<?php
declare(strict_types=1);

function returnIntValue(int $value): int
{
   return $value;
}

print(returnIntValue(5));
?>

以上程序執(zhí)行輸出結(jié)果為:5

返回類型聲明錯(cuò)誤示例

<?php
declare(strict_types=1);

function returnIntValue(int $value): int
{
   return $value + 3.0;
}

print(returnIntValue(1));
?>

以上程序由于采用了嚴(yán)格模式,返回值必須是 int,但是計(jì)算結(jié)果是float,導(dǎo)致報(bào)錯(cuò),執(zhí)行輸出結(jié)果為:Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

void 函數(shù)

注意:定義返回類型為 void 的函數(shù)不能有返回值,即使返回 null 也不行。

返回值聲明為 void 類型的方法要么干脆省去 return 語(yǔ)句,要么使用一個(gè)空的 return 語(yǔ)句。

實(shí)例

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

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

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

以上實(shí)例輸出結(jié)果:

null int(2) int(1)

關(guān)于“PHP類型聲明特性實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

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

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

php
AI