Polyfill
PHPの新しい機能や拡張モジュールに依存する機能を過去のPHPバージョンでも利用できるように移植することで環境間の差分を吸収する目的のライブラリのこと。 Polyfillの制約
パフォーマンスの面ではPHPで書かれた関数/メソッドはオリジナルのC実装には劣る
Polyfillでは新しいバージョンや拡張モジュールで追加されるクラス・関数のみ定義できる
定義済みのクラス・関数の振る舞いを変えることはできない
PHPで全てのクラス・関数を提供できるわけではない
Polyfillの種類
バージョンごとのPolyfill
関数 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
mb_関数の再実装
ただしmb_ereg*関数などOniguruma依存のコードは移植されていない
PHP 7.2でコア拡張からpeclに移動したmcrypt関数のPolyfill ただし全ての暗号スイートを完全にサポートしているわけではない Apacheなど一部のSAPIでしか提供されていないgetallheaders()を他の環境でも使えるように提供する