搜尋
首頁後端開發PHP7php7類型約束的意義

php7類型約束的意義

Nov 09, 2019 am 09:19 AM
php7

php7類型約束的意義

php7型別約束的意義

PHP7之前,函數和類別方法不需要聲明變數類型,任何資料都可以被傳遞和返回,導致幾乎大部分的呼叫操作都要判斷返回的資料類型是否合格。

為了解決這個問題,PHP7引入了類型宣告。

 

目前有兩類變數可以宣告型別: 形參,傳回值。

支援的型別有整形,浮點型,字串型,布林型。

 

如下程式碼:

<?php
function study(int $get)
{
    return $get;
}
var_dump(study(&#39;ddd&#39;));

為了節省程式碼篇幅,為就不寫OOP了,直接以函數為例。

此函數指定了參數類型為int,而呼叫的時候傳入'ddd'字串,因此此程式碼運行會產生Fatal error錯誤。

 

而有些情況,PHP總是不那麼認真,如下:

<?php
function study(bool $get)
{
    return $get;
}
var_dump(study(&#39;ddd&#39;));

指定參數類型為bool,但是傳入的字串被轉換成了true,執行後輸出的結果為:bool(true)

 

如要強制約束類型,可在檔案頭部新增declare宣告:

<?php
declare(strict_types = 1);
function study(bool $get)
{
    return $get;
}
var_dump(study(&#39;ddd&#39;));

此時也會產生一個致命錯誤,因為指定的參數類型為bool但是傳入的參數類型為string,只有把'ddd'換成true和false才可以,哪怕是1或0都不行。

 

接下來介紹一下返回類型宣告:

<?php
declare(strict_types = 1);
function study(bool $get) : int
{
    return (int)$get;
}
var_dump(study(true));

形參的括號後面加冒號加類型即可指定方法傳回值的型別,指定了什麼型別傳回的就是什麼類型。

同樣受declare影響,

如果不做型別強制約束,那麼PHP會將回傳的資料轉換成指定型別的資料再傳回,目前差不多只有string無法強轉為int才會報錯。

如果指定了強制約束,那麼PHP將不會進行類型轉換,而是進行對比,如類型不同,則報錯。

 

還有,傳回值類型,也可指定物件名,則必須傳回指定物件的實例,如:

<?php
class person
{
    private function __construct($name)
    {
        $this->name = $name;
    }
    static function instance(string $name) : person
    {
        return new self($name);
    }
}
person::instance(&#39;zhangsan&#39;);

 

這是PHP7的新功能之一:型別聲明。

以上是php7類型約束的意義的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版