symfony / polyfill
Symfony polyfill 将新版本PHP的特性向下兼容到旧版本
v1.31.0
2024-09-09 12:16 UTC
Requires
- php: >=7.2
Requires (Dev)
- symfony/intl: ^5.4|^6.4
- symfony/phpunit-bridge: ^6.4
- symfony/var-dumper: ^5.4|^6.4
Replaces
- symfony/polyfill-apcu: v1.31.0
- symfony/polyfill-ctype: v1.31.0
- symfony/polyfill-iconv: v1.31.0
- symfony/polyfill-intl-grapheme: v1.31.0
- symfony/polyfill-intl-icu: v1.31.0
- symfony/polyfill-intl-idn: v1.31.0
- symfony/polyfill-intl-messageformatter: v1.31.0
- symfony/polyfill-intl-normalizer: v1.31.0
- symfony/polyfill-mbstring: v1.31.0
- symfony/polyfill-php73: v1.31.0
- symfony/polyfill-php74: v1.31.0
- symfony/polyfill-php80: v1.31.0
- symfony/polyfill-php81: v1.31.0
- symfony/polyfill-php82: v1.31.0
- symfony/polyfill-php83: v1.31.0
- symfony/polyfill-php84: v1.31.0
- symfony/polyfill-util: v1.31.0
- symfony/polyfill-uuid: v1.31.0
- 1.x-dev
- v1.31.0
- v1.30.0
- v1.29.0
- v1.28.0
- v1.27.0
- v1.26.0
- v1.25.0
- v1.24.0
- v1.23.1
- v1.23.0
- v1.22.1
- v1.22.0
- v1.20.0
- v1.19.0
- v1.18.1
- v1.18.0
- v1.17.1
- v1.17.0
- v1.16.0
- v1.15.0
- v1.14.0
- v1.13.2
- v1.13.1
- v1.13.0
- v1.12.0
- v1.11.0
- v1.10.0
- v1.9.0
- v1.8.0
- v1.7.0
- v1.6.0
- v1.5.0
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.1
- v1.0.0
This package is auto-updated.
Last update: 2024-09-18 10:00:53 UTC
README
此项目将最新PHP版本中发现的功能向下兼容,并为某些扩展和函数提供兼容层。当需要跨PHP版本和扩展的便携性时,可使用此项目。
提供的polyfills包括:
- 当安装了旧版
apc
扩展时,为apcu
扩展提供; - 当PHP编译时没有ctype时,为
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
工具类; - 引入了PHP 7.2的
spl_object_id
和stream_isatty
函数; - 从
mbstring
扩展引入了PHP 7.2的mb_ord
、mb_chr
和mb_scrub
函数; - PHP 7.2中引入了仅适用于Windows的
sapi_windows_vt100_support
函数; - PHP 7.2中引入了
PHP_FLOAT_*
常量; - PHP 7.2中引入了
PHP_OS_FAMILY
常量; - PHP 7.3中引入了
is_countable
函数; - PHP 7.3中引入了
array_key_first
和array_key_last
函数; - PHP 7.3中引入了
hrtime
函数; - PHP 7.3中引入了
JsonException
类; - PHP 7.4中引入了
get_mangled_object_vars
、mb_str_split
和password_algos
函数; - PHP 8.0中引入了
fdiv
函数; - PHP 8.0中引入了
get_debug_type
函数; - PHP 8.0中引入了
preg_last_error_msg
函数; - PHP 8.0中引入了
str_contains
函数; - PHP 8.0中引入了
str_starts_with
和str_ends_with
函数; - PHP 8.0中引入了
ValueError
类; - PHP 8.0中引入了
UnhandledMatchError
类; - PHP 8.0中引入了
FILTER_VALIDATE_BOOL
常量; - PHP 8.0中引入了
get_resource_id
函数; - PHP 8.0中引入了
Attribute
类; - PHP 8.0中引入了
Stringable
接口; - 当启用tokenizer扩展时,PHP 8.0中引入了
PhpToken
类; - PHP 8.1中引入了
array_is_list
函数; - PHP 8.1中引入了
enum_exists
函数; - PHP 8.1中引入了
MYSQLI_REFRESH_REPLICA
常量; - PHP 8.1中引入了
ReturnTypeWillChange
属性。 - PHP 8.1 中引入的
CURLStringFile
类(但仅当使用 PHP >= 7.4 时有效); - PHP 8.2 中引入的
AllowDynamicProperties
属性; - PHP 8.2 中引入的
SensitiveParameter
属性; - PHP 8.2 中引入的
SensitiveParameterValue
类; - PHP 8.2 中引入的
Random\Engine
接口; - PHP 8.2 中引入的
Random\CryptoSafeEngine
接口; - PHP 8.2 中引入的
Random\Engine\Secure
类(检查 arokettu/random-polyfill 了解更多引擎); - PHP 8.2 中引入的
odbc_connection_string_is_quoted
函数; - PHP 8.2 中引入的
odbc_connection_string_should_quote
函数; - PHP 8.2 中引入的
odbc_connection_string_quote
函数; - PHP 8.2 中引入的
ini_parse_quantity
函数; - PHP 8.3 中引入的
json_validate
函数; - PHP 8.3 中引入的
Override
属性; - PHP 8.3 中引入的
mb_str_pad
函数; - PHP 8.3 中引入的
ldap_exop_sync
函数; - PHP 8.3 中引入的
ldap_connect_wallet
函数; - PHP 8.3 中引入的
stream_context_set_options
函数; - PHP 8.3 中引入的
str_increment
和str_decrement
函数; - PHP 8.3 中引入的
Date*Exception/Error
类; - PHP 8.3 中引入的
SQLite3Exception
类; - PHP 8.4 中引入的
mb_ucfirst
和mb_lcfirst
函数; - PHP 8.4 中引入的
array_find
、array_find_key
、array_any
和array_all
函数; - PHP 8.4 中引入的
Deprecated
属性; - PHP 8.4 中引入的
mb_trim
、mb_ltrim
和mb_rtrim
函数; - PHP 8.4 中引入的
CURL_HTTP_VERSION_3
和CURL_HTTP_VERSION_3ONLY
常量;
强烈建议尽可能升级您的 PHP 版本并/或安装缺少的扩展。此 polyfill 应仅在没有更好的选择或当可移植性是一个要求时使用。
兼容性说明
要编写在 PHP5 和 PHP7 之间可移植的代码,必须注意一些事项
- 必须在
\Exception
之前捕获\*Error
异常; - 在调用
error_clear_last()
之后,必须使用isset($e['message'][0])
验证$e = error_get_last()
的结果,而不是null !== $e
。
用法
当使用 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 normalizer,symfony/polyfill-mbstring
用于使用 mbstring 函数,symfony/polyfill-util
用于使用 polyfill 工具助手。symfony/polyfill-uuid
用于使用uuid_*
函数。
直接要求 symfony/polyfill
会导致 Composer 无法在依赖图中正确共享填充项。因此,可能会安装比所需更多的代码。
设计
此包旨在实现低开销和高质量的填充。
它仅向引导过程添加少量轻量级的 require
语句以支持所有填充。实现将在代码执行期间按需加载。
如果您的项目需要最低 PHP 版本,建议将较低 PHP 版本的填充项添加到 composer.json
的 replace
部分中。这将从这些填充项中移除任何开销,因为它们不再是您项目的一部分。同样,您可以为所需的扩展的填充项执行此操作。
如果您的项目需要 PHP 7.0 并需要 mb 扩展,replace 部分可能看起来像这样
{ "replace": { "symfony/polyfill-php54": "*", "symfony/polyfill-php55": "*", "symfony/polyfill-php56": "*", "symfony/polyfill-php70": "*", "symfony/polyfill-mbstring": "*" } }
填充项将与它们的原生实现一起进行单元测试,以确保功能和行为的兼容性,并在长期内得到验证和强制执行。
许可证
此库在 MIT 许可证 下发布。