php7型別約束的意義
在PHP7之前,函數和類方法不需要宣告變數型別,任何資料都可以被傳遞和返回,導致幾乎大部分的呼叫操作都要判斷返回的資料型別是否合格。
為了解決這個問題,PHP7引入了型別宣告。
目前有兩類變數可以宣告型別: 形參,返回值。
支援的型別有整形,浮點型,字串型,布林型。
如下程式碼:
<?php function study(int $get) { return $get; } var_dump(study('ddd'));
為了節省程式碼篇幅,為就不寫OOP了,直接以函數為例。
此函數指定了引數型別為int, 而呼叫的時候傳入'ddd'字串,因此此程式碼執行會產生Fatal error錯誤。
而有些情況,PHP總是不那麼認真,如下:
<?php function study(bool $get) { return $get; } var_dump(study('ddd'));
指定引數型別為bool,但是傳入的字串被轉化成了true,執行後輸出的結果為:bool(true)
如要強制性約束型別,可在檔案頭部新增declare宣告:
<?php declare(strict_types = 1); function study(bool $get) { return $get; } var_dump(study('ddd'));
此時也會產生一個致命錯誤,因為指定的引數型別為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('zhangsan');
這是PHP7的新特性之一:型別宣告。
以上就是php7型別約束的意義的詳細內容,更多請關注TW511.COM其它相關文章!