Este proyecto respalda las características que se encuentran en las últimas versiones de PHP y proporciona capas de compatibilidad para algunas extensiones y funciones. Está pensado para usarse cuando se desea portabilidad entre versiones y extensiones de PHP.
Se proporcionan Polyfills para:
apcu cuando está instalada la extensión apc heredada;ctype cuando PHP se compila sin ctype;mbstring e iconv ;uuid ;MessageFormatter y las funciones msgfmt_format_message ;Normalizer y las funciones grapheme_* ;utf8_encode y utf8_decode de la extensión xml o del núcleo PHP-7.2;Collator , NumberFormatter , Locale e IntlDateFormatter , limitadas a la configuración regional "en";intl_error_name , intl_get_error_code , intl_get_error_message e intl_is_failure ;idn_to_ascii e idn_to_utf8 ;Binary que se utilizará cuando se requiera compatibilidad con mbstring.func_overload ;spl_object_id y stream_isatty introducidas en PHP 7.2;mb_ord , mb_chr y mb_scrub introducidas en PHP 7.2 desde la extensión mbstringsapi_windows_vt100_support (solo Windows) introducida en PHP 7.2;PHP_FLOAT_* introducida en PHP 7.2;PHP_OS_FAMILY introducida en PHP 7.2;is_countable introducida en PHP 7.3;array_key_first y array_key_last introducidas en PHP 7.3;hrtime introducida en PHP 7.3;JsonException introducida en PHP 7.3;get_mangled_object_vars , mb_str_split y password_algos introducidas en PHP 7.4;fdiv introducida en PHP 8.0;get_debug_type introducida en PHP 8.0;preg_last_error_msg introducida en PHP 8.0;str_contains introducida en PHP 8.0;str_starts_with y str_ends_with introducidas en PHP 8.0;ValueError introducida en PHP 8.0;UnhandledMatchError introducida en PHP 8.0;FILTER_VALIDATE_BOOL introducida en PHP 8.0;get_resource_id introducida en PHP 8.0;Attribute introducida en PHP 8.0;Stringable introducida en PHP 8.0;PhpToken introducida en PHP 8.0 cuando la extensión tokenizer está habilitada;array_is_list introducida en PHP 8.1;enum_exists introducida en PHP 8.1;MYSQLI_REFRESH_REPLICA introducida en PHP 8.1;ReturnTypeWillChange introducido en PHP 8.1;CURLStringFile introducida en PHP 8.1 (pero sólo si se usa PHP >= 7.4);AllowDynamicProperties introducido en PHP 8.2;SensitiveParameter introducido en PHP 8.2;SensitiveParameterValue introducida en PHP 8.2;RandomEngine introducida en PHP 8.2;RandomCryptoSafeEngine introducida en PHP 8.2;RandomEngineSecure introducida en PHP 8.2 (consulte arokettu/random-polyfill para ver más motores);odbc_connection_string_is_quoted introducida en PHP 8.2;odbc_connection_string_should_quote introducida en PHP 8.2;odbc_connection_string_quote introducida en PHP 8.2;ini_parse_quantity introducida en PHP 8.2;json_validate introducida en PHP 8.3;Override introducido en PHP 8.3;mb_str_pad introducida en PHP 8.3;ldap_exop_sync introducida en PHP 8.3;ldap_connect_wallet introducida en PHP 8.3;stream_context_set_options introducida en PHP 8.3;str_increment y str_decrement introducidas en PHP 8.3;Date*Exception/Error introducidas en PHP 8.3;SQLite3Exception introducida en PHP 8.3;mb_ucfirst y mb_lcfirst introducidas en PHP 8.4;array_find , array_find_key , array_any y array_all introducidas en PHP 8.4;Deprecated introducido en PHP 8.4;mb_trim , mb_ltrim y mb_rtrim introducidas en PHP 8.4;CURL_HTTP_VERSION_3 y CURL_HTTP_VERSION_3ONLY introducidas en PHP 8.4;Se recomienda encarecidamente actualizar su versión de PHP y/o instalar las extensiones que faltan siempre que sea posible. Este polyfill debe usarse sólo cuando no hay mejor opción o cuando la portabilidad es un requisito.
Para escribir código portátil entre PHP5 y PHP7, se debe tener cierto cuidado:
*Error deben detectarse antes de Exception ;error_clear_last() , el resultado de $e = error_get_last() debe verificarse usando isset($e['message'][0]) en lugar de null !== $e . Cuando utilices Composer para gestionar tus dependencias, no deberías require el paquete symfony/polyfill , sino los independientes:
symfony/polyfill-apcu para usar las funciones apcu_* ,symfony/polyfill-ctype para usar las funciones ctype,symfony/polyfill-php54 para usar las funciones de PHP 5.4,symfony/polyfill-php55 para usar las funciones de PHP 5.5,symfony/polyfill-php56 para usar las funciones de PHP 5.6,symfony/polyfill-php70 para usar las funciones de PHP 7.0,symfony/polyfill-php71 para usar las funciones de PHP 7.1,symfony/polyfill-php72 para usar las funciones de PHP 7.2,symfony/polyfill-php73 para usar las funciones de PHP 7.3,symfony/polyfill-php74 para usar las funciones de PHP 7.4,symfony/polyfill-php80 para usar las funciones de PHP 8.0,symfony/polyfill-php81 para usar las funciones de PHP 8.1,symfony/polyfill-php82 para usar las funciones de PHP 8.2,symfony/polyfill-php83 para usar las funciones de PHP 8.3,symfony/polyfill-php84 para usar las funciones de PHP 8.4,symfony/polyfill-iconv para usar las funciones iconv,symfony/polyfill-intl-grapheme para usar las funciones grapheme_* ,symfony/polyfill-intl-idn para usar las funciones idn_to_ascii e idn_to_utf8 ,symfony/polyfill-intl-icu para usar las funciones y clases intl,symfony/polyfill-intl-messageformatter para usar el formato de mensajes intl,symfony/polyfill-intl-normalizer para usar el normalizador intl,symfony/polyfill-mbstring para usar las funciones mbstring,symfony/polyfill-util para usar los asistentes de la utilidad Polyfill.symfony/polyfill-uuid para usar las funciones uuid_* , Requerir symfony/polyfill directamente impediría que Composer compartiera correctamente los polyfills en los gráficos de dependencia. Como tal, probablemente instalaría más código del necesario.
Este paquete está diseñado para rellenos de polietileno de alta calidad y bajos gastos generales.
Agrega solo unas pocas declaraciones require ligeras al proceso de arranque para admitir todos los polyfills. Luego, las implementaciones se cargan según demanda cuando sea necesario durante la ejecución del código.
Si su proyecto requiere una versión mínima de PHP, es recomendable agregar polyfills para versiones inferiores de PHP a la sección replace de su composer.json . Esto elimina cualquier sobrecarga de estos polyfills, ya que ya no forman parte de su proyecto. Se puede hacer lo mismo con los polirellenos para las extensiones que necesite.
Si su proyecto requiere php 7.0 y necesita la extensión mb, la sección de reemplazo se vería así:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}Los Polyfills se prueban unitariamente junto con su implementación nativa para que la paridad de características y comportamiento pueda probarse y aplicarse a largo plazo.
Esta biblioteca se publica bajo la licencia MIT.