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