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的新特性之一:類型聲明。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM