この記事では、PHP 5のタイプの安全性の課題を調査し、ソリューションとして「拡張型」拡張を紹介します。 PHP 7は組み込みのスカラー型宣言を提供しますが、この拡張機能は古いPHPバージョンに同様の機能を提供します。
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; }
ボックスチームの「拡張タイプ」拡張機能は、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);
使用法: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.blacklist
augmented_types.whitelist
php 7以降:php.ini
PHP 7の組み込みタイプのヒントは、この拡張機能を新しいプロジェクトにほとんど不要にします。 ただし、「Augmented Type」は、コンポジットや配列タイプの宣言など、PHP 7にはない機能を提供します。 ランタイムオーバーヘッドを追加し、主に開発とテスト中に使用する必要があることを忘れないでください。
結論:
PHP 7は優れたタイプの安全性を提供しますが、「拡張タイプ」拡張機能は、レガシーPHP 5アプリケーションでタイプの安全性を維持するための貴重なソリューションを提供します。 その追加機能はパフォーマンスを犠牲にして提供されているため、開発とテストに最適ですが、生産環境には理想的です。 よくある質問(FAQ):(これらは元のテキストでは既に十分にカバーされているので、ここで繰り返されません。元のFAQセクションは包括的です。
以上がPHP 7またはHHVMなしでPHPに静的タイプを持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。