首頁  >  文章  >  後端開發  >  php7類型約束的意義

php7類型約束的意義

藏色散人
藏色散人原創
2019-11-09 09:19:272793瀏覽

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