首頁 >後端開發 >php教程 >我們可以在沒有PHP 7或HHVM的PHP中有靜態類型嗎?

我們可以在沒有PHP 7或HHVM的PHP中有靜態類型嗎?

William Shakespeare
William Shakespeare原創
2025-02-14 10:08:11867瀏覽

>本文探討了PHP 5中類型安全的挑戰,並引入了“增強類型”擴展作為解決方案。 雖然PHP 7提供內置標量類型聲明,但此擴展名為較舊的PHP版本提供了類似的功能。

Can We Have Static Types in PHP without PHP 7 or HHVM?

>問題:弱輸入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示例,適應其他系統):> >更新系統:

>安裝依賴項:
  1. sudo apt-get update克隆回購:
  2. sudo apt-get install php5-dev bison flex安裝擴展名:
  3. git clone git@github.com:box/augmented_types.git啟用>中的擴展名(使用
  4. >找到其位置):add
  5. phpize; ./configure --enable-augmented_types; make; make test; sudo make install
  6. >中啟用php.ini或全局的延伸器。 php -i | grep 'Loaded Configuration File'>。 zend_extension=/path/to/augmented_types.so
  7. 用法:

> 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提供了出色的類型安全性,但“增強類型”擴展提供了一種有價值的解決方案,可在Legacy PHP 5應用程序中保持類型的安全性。 它的額外功能以性能為代價,使其非常適合開發和測試,但不適合生產環境。

>

常見問題(常見問題解答):

(這些已經在原始文本中覆蓋了,所以我不會在這裡重複。

以上是我們可以在沒有PHP 7或HHVM的PHP中有靜態類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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