ホームページ > バックエンド開発 > PHPチュートリアル > PHP 7またはHHVMなしでPHPに静的タイプを持つことができますか?

PHP 7またはHHVMなしでPHPに静的タイプを持つことができますか?

William Shakespeare
リリース: 2025-02-14 10:08:11
オリジナル
862 人が閲覧しました

この記事では、PHP 5のタイプの安全性の課題を調査し、ソリューションとして「拡張型」拡張を紹介します。 PHP 7は組み込みのスカラー型宣言を提供しますが、この拡張機能は古いPHPバージョンに同様の機能を提供します。

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

問題:php 5の弱いタイピング

PHP 5の動的タイピングは、予期しない動作につながる可能性があります。 数値を増やすように設計された関数を考えてみましょう:

この関数はさまざまな入力タイプを受け入れ、暗黙の型変換を実行します。 堅牢なタイプチェックを追加するには、手動検証が必要です:
function plusone($a) { return $a + 1; }
ログイン後にコピー

PHP 5には、自動リターンタイプの施行もありません。
function plusone($a) { if (!is_numeric($a)) throw new InvalidArgumentException("Only numbers!"); return $a + 1; }
ログイン後にコピー

拡張タイプ: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. phpize; ./configure --enable-augmented_types; make; make test; sudo make install
  5. を使用してその場所を見つける)を有効にしてください:
  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);使用法:php.ini

拡張型は、型宣言にphpdocを使用します。 たとえば、

さて、integerを

に渡すと、ランタイムエラーが発生します。 拡張機能は、複合型(

)、配列タイプ(
/**
 * @param int $a
 * @return int
 */
function plusone($a) { return $a + 1; }
ログイン後にコピー
)、および

plusone()@param int|float $aファイルを無視する:@param int[] $a@return void

外部ライブラリからのエラーを防ぐには、

またはおよびディレクティブを使用して、どのファイルがチェックされているかを管理します。

augmented_types_blacklist() augmented_types.blacklistaugmented_types.whitelistphp 7以降:php.ini

PHP 7の組み込みタイプのヒントは、この拡張機能を新しいプロジェクトにほとんど不要にします。 ただし、「Augmented Type」は、コンポジットや配列タイプの宣言など、PHP 7にはない機能を提供します。 ランタイムオーバーヘッドを追加し、主に開発とテスト中に使用する必要があることを忘れないでください。

結論:

PHP 7は優れたタイプの安全性を提供しますが、「拡張タイプ」拡張機能は、レガシーPHP 5アプリケーションでタイプの安全性を維持するための貴重なソリューションを提供します。 その追加機能はパフォーマンスを犠牲にして提供されているため、開発とテストに最適ですが、生産環境には理想的です。

よくある質問(FAQ):

(これらは元のテキストでは既に十分にカバーされているので、ここで繰り返されません。元のFAQセクションは包括的です。

以上がPHP 7またはHHVMなしでPHPに静的タイプを持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート