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 mbstring
sapi_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.