- Notifications
You must be signed in to change notification settings - Fork0
BackEndTea/polyfill
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This project backports features found in the latest PHP versions and providescompatibility layers for some extensions and functions. It is intended to beused when portability across PHP versions and extensions is desired.
Polyfills are provided for:
- the
apcuextension when the legacyapcextension is installed; - the
ctypeextension when PHP is compiled without ctype; - the
mbstringandiconvextensions; - the
uuidextension; - the
MessageFormatterclass and themsgfmt_format_messagefunctions; - the
Normalizerclass and thegrapheme_*functions; - the
utf8_encodeandutf8_decodefunctions from thexmlextension or PHP-7.2 core; - the
Collator,NumberFormatter,LocaleandIntlDateFormatterclasses,limited to the "en" locale; - the
intl_error_name,intl_get_error_code,intl_get_error_messageandintl_is_failurefunctions; - the
idn_to_asciiandidn_to_utf8functions; - a
Binaryutility class to be used when compatibility withmbstring.func_overloadis required; - the
spl_object_idandstream_isattyfunctions introduced in PHP 7.2; - the
mb_ord,mb_chrandmb_scrubfunctions introduced in PHP 7.2 from thembstringextension - the
sapi_windows_vt100_supportfunction (Windows only) introduced in PHP 7.2; - the
PHP_FLOAT_*constant introduced in PHP 7.2; - the
PHP_OS_FAMILYconstant introduced in PHP 7.2; - the
is_countablefunction introduced in PHP 7.3; - the
array_key_firstandarray_key_lastfunctions introduced in PHP 7.3; - the
hrtimefunction introduced in PHP 7.3; - the
JsonExceptionclass introduced in PHP 7.3; - the
get_mangled_object_vars,mb_str_splitandpassword_algosfunctionsintroduced in PHP 7.4; - the
fdivfunction introduced in PHP 8.0; - the
get_debug_typefunction introduced in PHP 8.0; - the
preg_last_error_msgfunction introduced in PHP 8.0; - the
str_containsfunction introduced in PHP 8.0; - the
str_starts_withandstr_ends_withfunctions introduced in PHP 8.0; - the
ValueErrorclass introduced in PHP 8.0; - the
UnhandledMatchErrorclass introduced in PHP 8.0; - the
FILTER_VALIDATE_BOOLconstant introduced in PHP 8.0; - the
get_resource_idfunction introduced in PHP 8.0; - the
Attributeclass introduced in PHP 8.0; - the
Stringableinterface introduced in PHP 8.0; - the
PhpTokenclass introduced in PHP 8.0 when the tokenizer extension is enabled; - the
array_is_listfunction introduced in PHP 8.1; - the
enum_existsfunction introduced in PHP 8.1; - the
MYSQLI_REFRESH_REPLICAconstant introduced in PHP 8.1; - the
ReturnTypeWillChangeattribute introduced in PHP 8.1; - the
CURLStringFileclass introduced in PHP 8.1 (but only if PHP >= 7.4 is used); - the
AllowDynamicPropertiesattribute introduced in PHP 8.2; - the
SensitiveParameterattribute introduced in PHP 8.2; - the
SensitiveParameterValueclass introduced in PHP 8.2; - the
Random\Engineinterface introduced in PHP 8.2; - the
Random\CryptoSafeEngineinterface introduced in PHP 8.2; - the
Random\Engine\Secureclass introduced in PHP 8.2 (checkarokettu/random-polyfill for more engines); - the
odbc_connection_string_is_quotedfunction introduced in PHP 8.2; - the
odbc_connection_string_should_quotefunction introduced in PHP 8.2; - the
odbc_connection_string_quotefunction introduced in PHP 8.2; - the
ini_parse_quantityfunction introduced in PHP 8.2; - the
json_validatefunction introduced in PHP 8.3; - the
Overrideattribute introduced in PHP 8.3; - the
mb_str_padfunction introduced in PHP 8.3; - the
ldap_exop_syncfunction introduced in PHP 8.3; - the
ldap_connect_walletfunction introduced in PHP 8.3; - the
stream_context_set_optionsfunction introduced in PHP 8.3; - the
str_incrementandstr_decrementfunctions introduced in PHP 8.3; - the
Date*Exception/Errorclasses introduced in PHP 8.3; - the
SQLite3Exceptionclass introduced in PHP 8.3; - the
mb_ucfirstandmb_lcfirstfunctions introduced in PHP 8.4; - the
array_find,array_find_key,array_anyandarray_allfunctions introduced in PHP 8.4; - the
Deprecatedattribute introduced in PHP 8.4; - the
mb_trim,mb_ltrimandmb_rtrimfunctions introduced in PHP 8.4; - the
CURL_HTTP_VERSION_3andCURL_HTTP_VERSION_3ONLYconstants introduced in PHP 8.4;
It is strongly recommended to upgrade your PHP version and/or install the missingextensions whenever possible. This polyfill should be used only when there is nobetter choice or when portability is a requirement.
To write portable code between PHP5 and PHP7, some care must be taken:
\*Errorexceptions must be caught before\Exception;- after calling
error_clear_last(), the result of$e = error_get_last()must beverified usingisset($e['message'][0])instead ofnull !== $e.
When usingComposer to manage your dependencies, youshouldnotrequire thesymfony/polyfill package, but the standalone ones:
symfony/polyfill-apcufor using theapcu_*functions,symfony/polyfill-ctypefor using the ctype functions,symfony/polyfill-php54for using the PHP 5.4 functions,symfony/polyfill-php55for using the PHP 5.5 functions,symfony/polyfill-php56for using the PHP 5.6 functions,symfony/polyfill-php70for using the PHP 7.0 functions,symfony/polyfill-php71for using the PHP 7.1 functions,symfony/polyfill-php72for using the PHP 7.2 functions,symfony/polyfill-php73for using the PHP 7.3 functions,symfony/polyfill-php74for using the PHP 7.4 functions,symfony/polyfill-php80for using the PHP 8.0 functions,symfony/polyfill-php81for using the PHP 8.1 functions,symfony/polyfill-php82for using the PHP 8.2 functions,symfony/polyfill-php83for using the PHP 8.3 functions,symfony/polyfill-php84for using the PHP 8.4 functions,symfony/polyfill-iconvfor using the iconv functions,symfony/polyfill-intl-graphemefor using thegrapheme_*functions,symfony/polyfill-intl-idnfor using theidn_to_asciiandidn_to_utf8functions,symfony/polyfill-intl-icufor using the intl functions and classes,symfony/polyfill-intl-messageformatterfor using the intl messageformatter,symfony/polyfill-intl-normalizerfor using the intl normalizer,symfony/polyfill-mbstringfor using the mbstring functions,symfony/polyfill-utilfor using the polyfill utility helpers.symfony/polyfill-uuidfor using theuuid_*functions,
Requiringsymfony/polyfill directly would prevent Composer from sharingcorrectly polyfills in dependency graphs. As such, it would likely installmore code than required.
This package is designed for low overhead and high quality polyfilling.
It adds only a few lightweightrequire statements to the bootstrap processto support all polyfills. Implementations are then loaded on-demand whenneeded during code execution.
If your project requires a minimum PHP version it is advisable to add polyfillsfor lower PHP versions to thereplace section of yourcomposer.json.This removes any overhead from these polyfills as they are no longer part of your project.The same can be done for polyfills for extensions that you require.
If your project requires php 7.0, and needs the mb extension, the replace section would looksomething like this:
{"replace": {"symfony/polyfill-php54":"*","symfony/polyfill-php55":"*","symfony/polyfill-php56":"*","symfony/polyfill-php70":"*","symfony/polyfill-mbstring":"*" }}Polyfills are unit-tested alongside their native implementation so thatfeature and behavior parity can be proven and enforced in the long run.
This library is released under theMIT license.
About
PHP polyfills
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- PHP100.0%