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