Este projeto faz backport de recursos encontrados nas versões mais recentes do PHP e fornece camadas de compatibilidade para algumas extensões e funções. Destina-se a ser usado quando a portabilidade entre versões e extensões PHP é desejada.
Polyfills são fornecidos para:
apcu
quando a extensão apc
herdada estiver instalada;ctype
quando o PHP é compilado sem ctype;mbstring
e iconv
;uuid
;MessageFormatter
e as funções msgfmt_format_message
;Normalizer
e as funções grapheme_*
;utf8_encode
e utf8_decode
da extensão xml
ou núcleo do PHP-7.2;Collator
, NumberFormatter
, Locale
e IntlDateFormatter
, limitadas à localidade "en";intl_error_name
, intl_get_error_code
, intl_get_error_message
e intl_is_failure
;idn_to_ascii
e idn_to_utf8
;Binary
a ser usada quando a compatibilidade com mbstring.func_overload
for necessária;spl_object_id
e stream_isatty
introduzidas no PHP 7.2;mb_ord
, mb_chr
e mb_scrub
introduzidas no PHP 7.2 a partir da extensão mbstring
sapi_windows_vt100_support
(somente Windows) introduzida no PHP 7.2;PHP_FLOAT_*
introduzida no PHP 7.2;PHP_OS_FAMILY
introduzida no PHP 7.2;is_countable
introduzida no PHP 7.3;array_key_first
e array_key_last
introduzidas no PHP 7.3;hrtime
introduzida no PHP 7.3;JsonException
introduzida no PHP 7.3;get_mangled_object_vars
, mb_str_split
e password_algos
introduzidas no PHP 7.4;fdiv
introduzida no PHP 8.0;get_debug_type
introduzida no PHP 8.0;preg_last_error_msg
introduzida no PHP 8.0;str_contains
introduzida no PHP 8.0;str_starts_with
e str_ends_with
introduzidas no PHP 8.0;ValueError
introduzida no PHP 8.0;UnhandledMatchError
introduzida no PHP 8.0;FILTER_VALIDATE_BOOL
introduzida no PHP 8.0;get_resource_id
introduzida no PHP 8.0;Attribute
introduzida no PHP 8.0;Stringable
introduzida no PHP 8.0;PhpToken
introduzida no PHP 8.0 quando a extensão tokenizer está habilitada;array_is_list
introduzida no PHP 8.1;enum_exists
introduzida no PHP 8.1;MYSQLI_REFRESH_REPLICA
introduzida no PHP 8.1;ReturnTypeWillChange
introduzido no PHP 8.1;CURLStringFile
introduzida no PHP 8.1 (mas somente se PHP >= 7.4 for usado);AllowDynamicProperties
introduzido no PHP 8.2;SensitiveParameter
introduzido no PHP 8.2;SensitiveParameterValue
introduzida no PHP 8.2;RandomEngine
introduzida no PHP 8.2;RandomCryptoSafeEngine
introduzida no PHP 8.2;RandomEngineSecure
introduzida no PHP 8.2 (verifique arokettu/random-polyfill para mais mecanismos);odbc_connection_string_is_quoted
introduzida no PHP 8.2;odbc_connection_string_should_quote
introduzida no PHP 8.2;odbc_connection_string_quote
introduzida no PHP 8.2;ini_parse_quantity
introduzida no PHP 8.2;json_validate
introduzida no PHP 8.3;Override
introduzido no PHP 8.3;mb_str_pad
introduzida no PHP 8.3;ldap_exop_sync
introduzida no PHP 8.3;ldap_connect_wallet
introduzida no PHP 8.3;stream_context_set_options
introduzida no PHP 8.3;str_increment
e str_decrement
introduzidas no PHP 8.3;Date*Exception/Error
introduzidas no PHP 8.3;SQLite3Exception
introduzida no PHP 8.3;mb_ucfirst
e mb_lcfirst
introduzidas no PHP 8.4;array_find
, array_find_key
, array_any
e array_all
introduzidas no PHP 8.4;Deprecated
introduzido no PHP 8.4;mb_trim
, mb_ltrim
e mb_rtrim
introduzidas no PHP 8.4;CURL_HTTP_VERSION_3
e CURL_HTTP_VERSION_3ONLY
introduzidas no PHP 8.4;É altamente recomendável atualizar sua versão do PHP e/ou instalar as extensões ausentes sempre que possível. Este polyfill deve ser usado somente quando não houver escolha melhor ou quando a portabilidade for um requisito.
Para escrever código portátil entre PHP5 e PHP7, alguns cuidados devem ser tomados:
*Error
devem ser capturadas antes de Exception
;error_clear_last()
, o resultado de $e = error_get_last()
deve ser verificado usando isset($e['message'][0])
em vez de null !== $e
. Ao usar o Composer para gerenciar suas dependências, você não deve require
o pacote symfony/polyfill
, mas sim os pacotes independentes:
symfony/polyfill-apcu
para usar as funções apcu_*
,symfony/polyfill-ctype
para usar as funções ctype,symfony/polyfill-php54
por usar as funções do PHP 5.4,symfony/polyfill-php55
por usar as funções do PHP 5.5,symfony/polyfill-php56
por usar as funções do PHP 5.6,symfony/polyfill-php70
por usar as funções do PHP 7.0,symfony/polyfill-php71
por usar as funções do PHP 7.1,symfony/polyfill-php72
por usar as funções do PHP 7.2,symfony/polyfill-php73
por usar as funções do PHP 7.3,symfony/polyfill-php74
por usar as funções do PHP 7.4,symfony/polyfill-php80
por usar as funções do PHP 8.0,symfony/polyfill-php81
por usar as funções do PHP 8.1,symfony/polyfill-php82
por usar as funções do PHP 8.2,symfony/polyfill-php83
por usar as funções do PHP 8.3,symfony/polyfill-php84
por usar as funções do PHP 8.4,symfony/polyfill-iconv
para usar as funções iconv,symfony/polyfill-intl-grapheme
para usar as funções grapheme_*
,symfony/polyfill-intl-idn
para usar as funções idn_to_ascii
e idn_to_utf8
,symfony/polyfill-intl-icu
para usar as funções e classes intl,symfony/polyfill-intl-messageformatter
para usar o intl messageformatter,symfony/polyfill-intl-normalizer
para usar o normalizador intl,symfony/polyfill-mbstring
para usar as funções mbstring,symfony/polyfill-util
para usar os auxiliares do utilitário polyfill.symfony/polyfill-uuid
para usar as funções uuid_*
, Exigir diretamente symfony/polyfill
impediria o Composer de compartilhar corretamente polyfills em gráficos de dependência. Como tal, provavelmente instalaria mais código do que o necessário.
Este pacote foi projetado para polyfilling de baixa sobrecarga e alta qualidade.
Ele adiciona apenas algumas instruções require
leves ao processo de inicialização para suportar todos os polyfills. As implementações são então carregadas sob demanda quando necessário durante a execução do código.
Se o seu projeto requer uma versão mínima do PHP, é aconselhável adicionar polyfills para versões inferiores do PHP à seção replace
do seu composer.json
. Isso elimina qualquer sobrecarga desses polyfills, pois eles não fazem mais parte do seu projeto. O mesmo pode ser feito para polyfills para extensões que você precisa.
Se o seu projeto requer php 7.0 e precisa da extensão mb, a seção de substituição seria mais ou menos assim:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}
Polyfills são testados em unidade junto com sua implementação nativa para que a paridade de recursos e comportamento possa ser comprovada e aplicada no longo prazo.
Esta biblioteca é lançada sob a licença do MIT.