Ce projet rétroporte les fonctionnalités trouvées dans les dernières versions de PHP et fournit des couches de compatibilité pour certaines extensions et fonctions. Il est destiné à être utilisé lorsque la portabilité entre les versions et extensions de PHP est souhaitée.
Les polyfills sont fournis pour :
apcu lorsque l'ancienne extension apc est installée ;ctype lorsque PHP est compilé sans ctype ;mbstring et iconv ;uuid ;MessageFormatter et les fonctions msgfmt_format_message ;Normalizer et les fonctions grapheme_* ;utf8_encode et utf8_decode de l'extension xml ou du noyau PHP-7.2 ;Collator , NumberFormatter , Locale et IntlDateFormatter , limitées à la locale "en" ;intl_error_name , intl_get_error_code , intl_get_error_message et intl_is_failure ;idn_to_ascii et idn_to_utf8 ;Binary à utiliser lorsque la compatibilité avec mbstring.func_overload est requise ;spl_object_id et stream_isatty introduites dans PHP 7.2 ;mb_ord , mb_chr et mb_scrub introduites dans PHP 7.2 à partir de l'extension mbstringsapi_windows_vt100_support (Windows uniquement) introduite dans PHP 7.2 ;PHP_FLOAT_* introduite dans PHP 7.2 ;PHP_OS_FAMILY introduite dans PHP 7.2 ;is_countable introduite dans PHP 7.3 ;array_key_first et array_key_last introduites dans PHP 7.3 ;hrtime introduite dans PHP 7.3 ;JsonException introduite dans PHP 7.3 ;get_mangled_object_vars , mb_str_split et password_algos introduites dans PHP 7.4 ;fdiv introduite dans PHP 8.0 ;get_debug_type introduite dans PHP 8.0 ;preg_last_error_msg introduite dans PHP 8.0 ;str_contains introduite dans PHP 8.0 ;str_starts_with et str_ends_with introduites dans PHP 8.0 ;ValueError introduite dans PHP 8.0 ;UnhandledMatchError introduite dans PHP 8.0 ;FILTER_VALIDATE_BOOL introduite dans PHP 8.0 ;get_resource_id introduite dans PHP 8.0 ;Attribute introduite dans PHP 8.0 ;Stringable introduite dans PHP 8.0 ;PhpToken introduite dans PHP 8.0 lorsque l'extension tokenizer est activée ;array_is_list introduite dans PHP 8.1 ;enum_exists introduite dans PHP 8.1 ;MYSQLI_REFRESH_REPLICA introduite dans PHP 8.1 ;ReturnTypeWillChange introduit dans PHP 8.1 ;CURLStringFile introduite dans PHP 8.1 (mais seulement si PHP >= 7.4 est utilisé) ;AllowDynamicProperties introduit dans PHP 8.2 ;SensitiveParameter introduit dans PHP 8.2 ;SensitiveParameterValue introduite dans PHP 8.2 ;RandomEngine introduite dans PHP 8.2 ;RandomCryptoSafeEngine introduite dans PHP 8.2 ;RandomEngineSecure introduite dans PHP 8.2 (consultez arokettu/random-polyfill pour plus de moteurs) ;odbc_connection_string_is_quoted introduite dans PHP 8.2 ;odbc_connection_string_should_quote introduite dans PHP 8.2 ;odbc_connection_string_quote introduite dans PHP 8.2 ;ini_parse_quantity introduite dans PHP 8.2 ;json_validate introduite dans PHP 8.3 ;Override introduit dans PHP 8.3 ;mb_str_pad introduite dans PHP 8.3 ;ldap_exop_sync introduite dans PHP 8.3 ;ldap_connect_wallet introduite dans PHP 8.3 ;stream_context_set_options introduite dans PHP 8.3 ;str_increment et str_decrement introduites dans PHP 8.3 ;Date*Exception/Error introduites dans PHP 8.3 ;SQLite3Exception introduite dans PHP 8.3 ;mb_ucfirst et mb_lcfirst introduites dans PHP 8.4 ;array_find , array_find_key , array_any et array_all introduites dans PHP 8.4 ;Deprecated introduit dans PHP 8.4 ;mb_trim , mb_ltrim et mb_rtrim introduites dans PHP 8.4 ;CURL_HTTP_VERSION_3 et CURL_HTTP_VERSION_3ONLY introduites dans PHP 8.4 ;Il est fortement recommandé de mettre à jour votre version de PHP et/ou d'installer les extensions manquantes lorsque cela est possible. Ce polyfill ne doit être utilisé que lorsqu'il n'y a pas de meilleur choix ou lorsque la portabilité est une exigence.
Pour écrire du code portable entre PHP5 et PHP7, certaines précautions doivent être prises :
*Error doivent être interceptées avant Exception ;error_clear_last() , le résultat de $e = error_get_last() doit être vérifié en utilisant isset($e['message'][0]) au lieu de null !== $e . Lorsque vous utilisez Composer pour gérer vos dépendances, vous ne devez pas require du package symfony/polyfill , mais des packages autonomes :
symfony/polyfill-apcu pour utiliser les fonctions apcu_* ,symfony/polyfill-ctype pour utiliser les fonctions ctype,symfony/polyfill-php54 pour utiliser les fonctions PHP 5.4,symfony/polyfill-php55 pour utiliser les fonctions PHP 5.5,symfony/polyfill-php56 pour utiliser les fonctions PHP 5.6,symfony/polyfill-php70 pour utiliser les fonctions PHP 7.0,symfony/polyfill-php71 pour utiliser les fonctions PHP 7.1,symfony/polyfill-php72 pour utiliser les fonctions PHP 7.2,symfony/polyfill-php73 pour utiliser les fonctions PHP 7.3,symfony/polyfill-php74 pour utiliser les fonctions PHP 7.4,symfony/polyfill-php80 pour utiliser les fonctions PHP 8.0,symfony/polyfill-php81 pour utiliser les fonctions PHP 8.1,symfony/polyfill-php82 pour utiliser les fonctions PHP 8.2,symfony/polyfill-php83 pour utiliser les fonctions PHP 8.3,symfony/polyfill-php84 pour utiliser les fonctions PHP 8.4,symfony/polyfill-iconv pour utiliser les fonctions iconv,symfony/polyfill-intl-grapheme pour utiliser les fonctions grapheme_* ,symfony/polyfill-intl-idn pour utiliser les fonctions idn_to_ascii et idn_to_utf8 ,symfony/polyfill-intl-icu pour utiliser les fonctions et classes intl,symfony/polyfill-intl-messageformatter pour utiliser le intl messageformatter,symfony/polyfill-intl-normalizer pour utiliser le normaliseur intl,symfony/polyfill-mbstring pour utiliser les fonctions mbstring,symfony/polyfill-util pour utiliser les assistants utilitaires polyfill.symfony/polyfill-uuid pour utiliser les fonctions uuid_* , Exiger directement symfony/polyfill empêcherait Composer de partager correctement les polyfills dans les graphiques de dépendances. En tant que tel, il installerait probablement plus de code que nécessaire.
Ce package est conçu pour un polyfilling à faible coût et de haute qualité.
Il n'ajoute que quelques instructions require légères au processus d'amorçage pour prendre en charge tous les polyfills. Les implémentations sont ensuite chargées à la demande en cas de besoin pendant l'exécution du code.
Si votre projet nécessite une version minimale de PHP, il est conseillé d'ajouter des polyfills pour les versions PHP inférieures à la section replace de votre composer.json . Cela supprime toute surcharge de ces polyfills car ils ne font plus partie de votre projet. La même chose peut être faite pour les polyfills pour les extensions dont vous avez besoin.
Si votre projet nécessite PHP 7.0 et nécessite l'extension mb, la section de remplacement ressemblerait à ceci :
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}Les polyfills sont testés unitairement parallèlement à leur implémentation native afin que la parité des fonctionnalités et des comportements puisse être prouvée et appliquée à long terme.
Cette bibliothèque est publiée sous licence MIT.