Этот проект поддерживает функции последних версий PHP и обеспечивает уровни совместимости для некоторых расширений и функций. Он предназначен для использования, когда требуется переносимость между версиями и расширениями PHP.
Полифилы предусмотрены для:
apcu
если установлено устаревшее расширение apc
;ctype
, когда PHP компилируется без ctype;mbstring
и iconv
;uuid
;MessageFormatter
и функции msgfmt_format_message
;Normalizer
и функции grapheme_*
;utf8_encode
и utf8_decode
из расширения xml
или ядра PHP-7.2;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
;Binary
служебный класс, который будет использоваться, когда требуется совместимость с mbstring.func_overload
;spl_object_id
stream_isatty
представленные в PHP 7.2;mb_ord
, mb_chr
и mb_scrub
, представленные в PHP 7.2 из расширения mbstring
sapi_windows_vt100_support
(только для Windows), представленная в PHP 7.2;PHP_FLOAT_*
, представленная в PHP 7.2;PHP_OS_FAMILY
, представленная в PHP 7.2;is_countable
представленная в PHP 7.3;array_key_first
и array_key_last
представленные в PHP 7.3;hrtime
представленная в PHP 7.3;JsonException
представленный в PHP 7.3;get_mangled_object_vars
, mb_str_split
и password_algos
представленные в PHP 7.4;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
представленный в PHP 8.0;PhpToken
, представленный в PHP 8.0, когда включено расширение токенизатора;array_is_list
представленная в PHP 8.1;enum_exists
представленная в PHP 8.1;MYSQLI_REFRESH_REPLICA
, представленная в PHP 8.1;ReturnTypeWillChange
представленный в PHP 8.1;CURLStringFile
, представленный в PHP 8.1 (но только если используется PHP >= 7.4);AllowDynamicProperties
представленный в PHP 8.2;SensitiveParameter
представленный в PHP 8.2;SensitiveParameterValue
, представленный в PHP 8.2;RandomEngine
представленный в PHP 8.2;RandomCryptoSafeEngine
представленный в PHP 8.2;RandomEngineSecure
представленный в PHP 8.2 (больше движков можно найти в arokettu/random-polyfill);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.2;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.3;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 8.4;Настоятельно рекомендуется обновить версию PHP и/или установить недостающие расширения, когда это возможно. Этот полифилл следует использовать только тогда, когда нет лучшего выбора или когда требуется переносимость.
Чтобы написать переносимый код между PHP5 и PHP7, необходимо соблюдать некоторую осторожность:
*Error
должны быть перехвачены до Exception
;error_clear_last()
результат $e = error_get_last()
должен быть проверен с использованием isset($e['message'][0])
вместо 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,symfony/polyfill-mbstring
для использования функций mbstring,symfony/polyfill-util
для использования помощников утилиты polyfill.symfony/polyfill-uuid
для использования функций uuid_*
, Прямое требование symfony/polyfill
помешает Composer правильно использовать полифилы в графах зависимостей. Таким образом, скорее всего, будет установлено больше кода, чем требуется.
Этот пакет предназначен для небольших накладных расходов и высокого качества полифилла.
Он добавляет лишь несколько облегченных операторов require
в процесс начальной загрузки для поддержки всех полифилов. Затем реализации загружаются по требованию, когда это необходимо во время выполнения кода.
Если вашему проекту требуется минимальная версия PHP, рекомендуется добавить полифилы для более низких версий PHP в раздел replace
вашего composer.json
. Это устранит любые накладные расходы на эти полифилы, поскольку они больше не являются частью вашего проекта. То же самое можно сделать и с полифилами для необходимых вам расширений.
Если вашему проекту требуется PHP 7.0 и расширение mb, раздел замены будет выглядеть примерно так:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}
Полифиллы тестируются вместе с их собственной реализацией, поэтому в долгосрочной перспективе можно доказать и обеспечить соответствие функций и поведения.
Эта библиотека выпущена под лицензией MIT.