>本文探討了PHP 5中類型安全的挑戰,並引入了“增強類型”擴展作為解決方案。 雖然PHP 7提供內置標量類型聲明,但此擴展名為較舊的PHP版本提供了類似的功能。
>問題:弱輸入php 5
> PHP 5的動態鍵入會導致出乎意料的行為。 考慮一個旨在增加數字的函數:
<code class="language-php">function plusone($a) { return $a + 1; }</code>此功能接受各種輸入類型,並執行隱式類型轉換。 添加可靠的類型檢查需要手動驗證:
PHP 5也缺少自動返回類型執行。
<code class="language-php">function plusone($a) { if (!is_numeric($a)) throw new InvalidArgumentException("Only numbers!"); return $a + 1; }</code>
增強類型:php 5解決方案
> >盒子團隊的“增強類型”擴展程序利用PHPDOC註釋在運行時強制執行類型的安全性。 它避免了核心修改或分叉。
>安裝(用於php 5):
遵循以下步驟(ubuntu示例,適應其他系統):
>安裝依賴項:
sudo apt-get update
克隆回購:sudo apt-get install php5-dev bison flex
安裝擴展名:git clone git@github.com:box/augmented_types.git
啟用>中的擴展名(使用phpize; ./configure --enable-augmented_types; make; make test; sudo make install
php.ini
或全局的延伸器。 php -i | grep 'Loaded Configuration File'
>。
zend_extension=/path/to/augmented_types.so
>
ini_set("augmented_types.enforce_by_default", 1);
增強類型使用PHPDOC進行類型聲明。 例如:php.ini
>現在,將非直覺傳遞到
<code class="language-php">/** * @param int $a * @return int */ function plusone($a) { return $a + 1; }</code>>忽略文件:
plusone()
@param int|float $a
為了防止外部庫中的錯誤,請使用@param int[] $a
>或@return void
和
中的指令來管理哪些文件。
>
結論: 常見問題(常見問題解答):augmented_types_blacklist()
php 7及以後:augmented_types.blacklist
>PHP 7的內置類型提示使此擴展名在很大程度上是不必要的。 但是,“增強類型”提供了PHP 7中未找到的功能,例如復合和數組類型聲明。 請記住,它增加了運行時開銷,應主要在開發和測試過程中使用。
以上是我們可以在沒有PHP 7或HHVM的PHP中有靜態類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!