polyfill
1.0.0
該專案向後移植最新 PHP 版本中的功能,並為某些擴充功能和功能提供相容層。它旨在在需要跨 PHP 版本和擴展的可移植性時使用。
Polyfill 用於:
apc擴充時的apcu擴充;ctype擴充;mbstring和iconv擴充;uuid副檔名;MessageFormatter類別和msgfmt_format_message函數;Normalizer類別和grapheme_*函式;xml擴充或 PHP-7.2 核心中的utf8_encode和utf8_decode函數;Collator 、 NumberFormatter 、 Locale和IntlDateFormatter類,僅限於「en」區域設定;intl_error_name 、 intl_get_error_code 、 intl_get_error_message和intl_is_failure函數;idn_to_ascii和idn_to_utf8函數;mbstring.func_overload相容時使用的二進Binary實用程式類別;spl_object_id和stream_isatty函數;mbstring擴充引入的mb_ord 、 mb_chr和mb_scrub函數sapi_windows_vt100_support函數(僅限 Windows);PHP_FLOAT_*常數;PHP_OS_FAMILY常數;is_countable函數;array_key_first和array_key_last函數;hrtime函數;JsonException類別;get_mangled_object_vars 、 mb_str_split和password_algos函數;fdiv函數;get_debug_type函數;preg_last_error_msg函數;str_contains函數;str_starts_with和str_ends_with函數;ValueError類別;UnhandledMatchError類別;FILTER_VALIDATE_BOOL常數;get_resource_id函數;Attribute類別;Stringable介面;PhpToken類別;array_is_list函數;enum_exists函數;MYSQLI_REFRESH_REPLICA常數;ReturnTypeWillChange屬性;CURLStringFile類別(但僅當使用 PHP >= 7.4 時);AllowDynamicProperties屬性;SensitiveParameter屬性;SensitiveParameterValue類別;RandomEngine介面;RandomCryptoSafeEngine介面;RandomEngineSecure類別(請參閱 arokettu/random-polyfill 以了解更多引擎);odbc_connection_string_is_quoted函數;odbc_connection_string_should_quote函數;odbc_connection_string_quote函數;ini_parse_quantity函數;json_validate函數;Override屬性;mb_str_pad函數;ldap_exop_sync函數;ldap_connect_wallet函數;stream_context_set_options函數;str_increment和str_decrement函數;Date*Exception/Error類別;SQLite3Exception類別;mb_ucfirst和mb_lcfirst函數;array_find 、 array_find_key 、 array_any和array_all函數;Deprecated屬性;mb_trim 、 mb_ltrim和mb_rtrim函數;CURL_HTTP_VERSION_3和CURL_HTTP_VERSION_3ONLY常數;強烈建議盡可能升級您的 PHP 版本和/或安裝缺少的擴充功能。僅當沒有更好的選擇或需要可移植性時才應使用此填充物。
要在 PHP5 和 PHP7 之間編寫可移植程式碼,必須注意一些事項:
*Error異常必須在Exception之前捕獲;error_clear_last()後,必須使用isset($e['message'][0])而不是null !== $e驗證$e = error_get_last()的結果。當使用 Composer 管理相依性時,您不應該require symfony/polyfill套件,而是需要獨立的套件:
symfony/polyfill-apcu用來使用apcu_*函數,symfony/polyfill-ctype用於使用 ctype 函數,symfony/polyfill-php54用於使用 PHP 5.4 函數,symfony/polyfill-php55用於使用 PHP 5.5 函數,symfony/polyfill-php56用來使用 PHP 5.6 函數,symfony/polyfill-php70用於使用 PHP 7.0 函數,symfony/polyfill-php71用於使用 PHP 7.1 函數,symfony/polyfill-php72用於使用 PHP 7.2 函數,symfony/polyfill-php73用於使用 PHP 7.3 函數,symfony/polyfill-php74用於使用 PHP 7.4 函數,symfony/polyfill-php80用於使用 PHP 8.0 函數,symfony/polyfill-php81用於使用 PHP 8.1 函數,symfony/polyfill-php82用於使用 PHP 8.2 函數,symfony/polyfill-php83用於使用 PHP 8.3 函數,symfony/polyfill-php84用於使用 PHP 8.4 函數,symfony/polyfill-iconv用於使用 iconv 函數,symfony/polyfill-intl-grapheme用於使用grapheme_*函數,symfony/polyfill-intl-idn用來使用idn_to_ascii和idn_to_utf8函數,symfony/polyfill-intl-icu用於使用 intl 函數和類,symfony/polyfill-intl-messageformatter用於使用 intl messageformatter,symfony/polyfill-intl-normalizer用於使用 intl 標準化器,symfony/polyfill-mbstring用於使用 mbstring 函數,symfony/polyfill-util用於使用 polyfill 實用程式幫助程式。symfony/polyfill-uuid用來使用uuid_*函數,直接要求symfony/polyfill會阻止 Composer 在依賴圖中正確共享 polyfill。因此,它可能會安裝比所需更多的程式碼。
該封裝專為低開銷和高品質聚合填充而設計。
它只在引導過程中加入了一些輕量級的require語句來支援所有的 polyfill。然後在程式碼執行期間需要時按需載入實作。
如果您的專案需要最低 PHP 版本,建議將較低 PHP 版本的 polyfill 新增至composer.json的replace部分。這消除了這些 Polyfill 的任何開銷,因為它們不再是您專案的一部分。對於您需要的擴展,也可以對 Polyfill 執行相同的操作。
如果您的專案需要 php 7.0,並且需要 mb 擴展,則替換部分將如下所示:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}Polyfill 與其本機實作一起進行了單元測試,因此從長遠來看,可以證明和執行功能和行為的一致性。
該庫是在 MIT 許可下發布的。