Этот проект поддерживает функции последних версий 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 из расширения mbstringsapi_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.