Polyfill
#英語: polyfill (ポリフィル)
PHPの新しい機能や拡張モジュールに依存する機能を過去のPHPバージョンでも利用できるように移植することで環境間の差分を吸収する目的のライブラリのこと。
なぜPolyfillという概念が重要なのかはNew in Symfony 2.8: Polyfill Components (Symfony Blog)で説明されており、実際に各コンポーネントでPHPのバージョンや関数の有無によって振る舞いを変える処理を削減し、その機能が既にある前提でコーディングすることができる。
Polyfillの制約
パフォーマンスの面ではPHPで書かれた関数/メソッドはオリジナルのC実装には劣る
Polyfillでは新しいバージョンや拡張モジュールで追加されるクラス・関数のみ定義できる
定義済みのクラス・関数の振る舞いを変えることはできない
PHPで全てのクラス・関数を提供できるわけではない
WeakMapなどはユーザー定義クラスでは再現できない
Polyfillの種類
Symfony\Polyfill https://packagist.org/packages/symfony/?query=symfony%2Fpolyfill
バージョンごとのPolyfill
symfony/polyfill-php80 - Packagist
関数 fdiv(), get_debug_type(), preg_last_error_msg(), str_contains(), str_starts_with(), str_ends_with(), get_resource_id()
クラス ValueError, UnhandledMatchError
定数 FILTER_VALIDATE_BOOL
インターフェイス Stringable
拡張モジュールのPolyfill
symfony/polyfill-mbstring - Packagist
mb_関数の再実装
ただしmb_ereg*関数などOniguruma依存のコードは移植されていない
phpseclib/mcrypt_compat - Packagist
PHP 7.2でコア拡張からpeclに移動したmcrypt関数のPolyfill
ただし全ての暗号スイートを完全にサポートしているわけではない
ralouphie/getallheaders - Packagist
Apacheなど一部のSAPIでしか提供されていないgetallheaders()を他の環境でも使えるように提供する