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 許可下發布的。