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 mbstringsapi_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.