Dieses Projekt portiert Funktionen der neuesten PHP-Versionen zurück und stellt Kompatibilitätsebenen für einige Erweiterungen und Funktionen bereit. Es soll verwendet werden, wenn Portabilität zwischen PHP-Versionen und -Erweiterungen gewünscht wird.
Polyfills werden bereitgestellt für:
apcu
Erweiterung, wenn die Legacy apc
Erweiterung installiert ist;ctype
Erweiterung, wenn PHP ohne ctype kompiliert wird;mbstring
und iconv
;uuid
-Erweiterung;MessageFormatter
-Klasse und die msgfmt_format_message
-Funktionen;Normalizer
-Klasse und die grapheme_*
Funktionen;utf8_encode
und utf8_decode
aus der xml
Erweiterung oder dem PHP-7.2-Kern;Collator
, NumberFormatter
, Locale
und IntlDateFormatter
, beschränkt auf das Gebietsschema „en“;intl_error_name
, intl_get_error_code
, intl_get_error_message
und intl_is_failure
;idn_to_ascii
und idn_to_utf8
;Binary
Dienstprogrammklasse, die verwendet wird, wenn Kompatibilität mit mbstring.func_overload
erforderlich ist;spl_object_id
und stream_isatty
;mb_ord
, mb_chr
und mb_scrub
, die in PHP 7.2 aus der mbstring
-Erweiterung eingeführt wurdensapi_windows_vt100_support
(nur Windows);PHP_FLOAT_*
Konstante;PHP_OS_FAMILY
Konstante;is_countable
;array_key_first
und array_key_last
;hrtime
Funktion;JsonException
Klasse;get_mangled_object_vars
, mb_str_split
und password_algos
;fdiv
Funktion;get_debug_type
;preg_last_error_msg
;str_contains
;str_starts_with
und str_ends_with
;ValueError
-Klasse;UnhandledMatchError
-Klasse;FILTER_VALIDATE_BOOL
-Konstante;get_resource_id
;Attribute
-Klasse;Stringable
Schnittstelle;PhpToken
Klasse, die in PHP 8.0 eingeführt wurde, wenn die Tokenizer-Erweiterung aktiviert ist;array_is_list
;enum_exists
;MYSQLI_REFRESH_REPLICA
;ReturnTypeWillChange
Attribut;CURLStringFile
-Klasse (jedoch nur, wenn PHP >= 7.4 verwendet wird);AllowDynamicProperties
-Attribut;SensitiveParameter
-Attribut;SensitiveParameterValue
-Klasse, die in PHP 8.2 eingeführt wurde;RandomEngine
Schnittstelle;RandomCryptoSafeEngine
;RandomEngineSecure
Klasse (weitere Engines finden Sie unter arokettu/random-polyfill);odbc_connection_string_is_quoted
;odbc_connection_string_should_quote
;odbc_connection_string_quote
;ini_parse_quantity
;json_validate
;Override
Attribut;mb_str_pad
;ldap_exop_sync
;ldap_connect_wallet
;stream_context_set_options
;str_increment
und str_decrement
;Date*Exception/Error
-Klassen;SQLite3Exception
Klasse;mb_ucfirst
und mb_lcfirst
;array_find
, array_find_key
, array_any
und array_all
;Deprecated
-Attribut;mb_trim
, mb_ltrim
und mb_rtrim
;CURL_HTTP_VERSION_3
und CURL_HTTP_VERSION_3ONLY
;Es wird dringend empfohlen, Ihre PHP-Version zu aktualisieren und/oder die fehlenden Erweiterungen zu installieren, wann immer dies möglich ist. Diese Polyfüllung sollte nur verwendet werden, wenn es keine bessere Wahl gibt oder wenn Tragbarkeit erforderlich ist.
Um portablen Code zwischen PHP5 und PHP7 zu schreiben, müssen einige Vorsichtsmaßnahmen getroffen werden:
*Error
Fehlerausnahmen müssen vor Exception
abgefangen werden;error_clear_last()
muss das Ergebnis von $e = error_get_last()
mit isset($e['message'][0])
anstelle von null !== $e
überprüft werden. Wenn Sie Composer zum Verwalten Ihrer Abhängigkeiten verwenden, sollten Sie nicht das symfony/polyfill
-Paket, sondern die eigenständigen Pakete require
:
symfony/polyfill-apcu
für die Verwendung der apcu_*
Funktionen,symfony/polyfill-ctype
zur Verwendung der ctype-Funktionen,symfony/polyfill-php54
für die Nutzung der PHP 5.4-Funktionen,symfony/polyfill-php55
für die Nutzung der PHP 5.5-Funktionen,symfony/polyfill-php56
für die Nutzung der PHP 5.6-Funktionen,symfony/polyfill-php70
für die Nutzung der PHP 7.0-Funktionen,symfony/polyfill-php71
für die Nutzung der PHP 7.1-Funktionen,symfony/polyfill-php72
für die Nutzung der PHP 7.2-Funktionen,symfony/polyfill-php73
für die Nutzung der PHP 7.3-Funktionen,symfony/polyfill-php74
für die Nutzung der PHP 7.4-Funktionen,symfony/polyfill-php80
für die Nutzung der PHP 8.0-Funktionen,symfony/polyfill-php81
für die Nutzung der PHP 8.1-Funktionen,symfony/polyfill-php82
für die Nutzung der PHP 8.2-Funktionen,symfony/polyfill-php83
für die Nutzung der PHP 8.3-Funktionen,symfony/polyfill-php84
für die Nutzung der PHP 8.4-Funktionen,symfony/polyfill-iconv
zur Verwendung der Iconv-Funktionen,symfony/polyfill-intl-grapheme
für die Verwendung der grapheme_*
Funktionen,symfony/polyfill-intl-idn
für die Verwendung der Funktionen idn_to_ascii
und idn_to_utf8
,symfony/polyfill-intl-icu
für die Verwendung der intl-Funktionen und -Klassen,symfony/polyfill-intl-messageformatter
für die Verwendung des intl messageformatter,symfony/polyfill-intl-normalizer
für die Verwendung des intl Normalizers,symfony/polyfill-mbstring
zur Verwendung der mbstring-Funktionen,symfony/polyfill-util
für die Verwendung der Hilfsprogramme des Polyfill-Dienstprogramms.symfony/polyfill-uuid
für die Verwendung der uuid_*
Funktionen, Die direkte Anforderung von symfony/polyfill
würde Composer daran hindern, Polyfills in Abhängigkeitsdiagrammen korrekt zu teilen. Daher würde es wahrscheinlich mehr Code installieren als erforderlich.
Dieses Paket ist für geringen Aufwand und hochwertiges Polyfilling konzipiert.
Es fügt dem Bootstrap-Prozess nur ein paar einfache require
-Anweisungen hinzu, um alle Polyfills zu unterstützen. Implementierungen werden dann bei Bedarf während der Codeausführung geladen.
Wenn Ihr Projekt eine PHP-Mindestversion erfordert, ist es ratsam, Polyfills für niedrigere PHP-Versionen zum replace
Ihrer composer.json
hinzuzufügen. Dadurch entfällt jeglicher Overhead für diese Polyfills, da sie nicht mehr Teil Ihres Projekts sind. Das Gleiche gilt für Polyfills für von Ihnen benötigte Erweiterungen.
Wenn Ihr Projekt PHP 7.0 erfordert und die MB-Erweiterung benötigt, würde der Ersetzungsabschnitt etwa so aussehen:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}
Polyfills werden zusammen mit ihrer nativen Implementierung Unit-Tests unterzogen, sodass die Funktions- und Verhaltensparität langfristig nachgewiesen und durchgesetzt werden kann.
Diese Bibliothek wird unter der MIT-Lizenz veröffentlicht.