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.