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