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 许可下发布的。