Proyek ini mendukung fitur-fitur yang ditemukan dalam versi PHP terbaru dan menyediakan lapisan kompatibilitas untuk beberapa ekstensi dan fungsi. Ini dimaksudkan untuk digunakan ketika portabilitas di seluruh versi dan ekstensi PHP diinginkan.
Polyfill disediakan untuk:
apcu ketika ekstensi apc lama dipasang;ctype ketika PHP dikompilasi tanpa ctype;mbstring dan iconv ;uuid ;MessageFormatter dan fungsi msgfmt_format_message ;Normalizer dan fungsi grapheme_* ;utf8_encode dan utf8_decode dari ekstensi xml atau inti PHP-7.2;Collator , NumberFormatter , Locale dan IntlDateFormatter , terbatas pada lokal "en";intl_error_name , intl_get_error_code , intl_get_error_message dan intl_is_failure ;idn_to_ascii dan idn_to_utf8 ;Binary untuk digunakan ketika kompatibilitas dengan mbstring.func_overload diperlukan;spl_object_id dan stream_isatty yang diperkenalkan di PHP 7.2;mb_ord , mb_chr dan mb_scrub diperkenalkan di PHP 7.2 dari ekstensi mbstringsapi_windows_vt100_support (hanya Windows) yang diperkenalkan di PHP 7.2;PHP_FLOAT_* yang diperkenalkan di PHP 7.2;PHP_OS_FAMILY yang diperkenalkan di PHP 7.2;is_countable diperkenalkan di PHP 7.3;array_key_first dan array_key_last diperkenalkan di PHP 7.3;hrtime yang diperkenalkan di PHP 7.3;JsonException yang diperkenalkan di PHP 7.3;get_mangled_object_vars , mb_str_split dan password_algos diperkenalkan di PHP 7.4;fdiv yang diperkenalkan di PHP 8.0;get_debug_type diperkenalkan di PHP 8.0;preg_last_error_msg diperkenalkan di PHP 8.0;str_contains diperkenalkan di PHP 8.0;str_starts_with dan str_ends_with yang diperkenalkan di PHP 8.0;ValueError diperkenalkan di PHP 8.0;UnhandledMatchError diperkenalkan di PHP 8.0;FILTER_VALIDATE_BOOL yang diperkenalkan di PHP 8.0;get_resource_id diperkenalkan di PHP 8.0;Attribute yang diperkenalkan di PHP 8.0;Stringable yang diperkenalkan di PHP 8.0;PhpToken yang diperkenalkan di PHP 8.0 ketika ekstensi tokenizer diaktifkan;array_is_list yang diperkenalkan di PHP 8.1;enum_exists yang diperkenalkan di PHP 8.1;MYSQLI_REFRESH_REPLICA yang diperkenalkan di PHP 8.1;ReturnTypeWillChange diperkenalkan di PHP 8.1;CURLStringFile diperkenalkan di PHP 8.1 (tetapi hanya jika PHP >= 7.4 digunakan);AllowDynamicProperties diperkenalkan di PHP 8.2;SensitiveParameter yang diperkenalkan di PHP 8.2;SensitiveParameterValue yang diperkenalkan di PHP 8.2;RandomEngine yang diperkenalkan di PHP 8.2;RandomCryptoSafeEngine yang diperkenalkan di PHP 8.2;RandomEngineSecure yang diperkenalkan di PHP 8.2 (periksa arokettu/random-polyfill untuk mesin lainnya);odbc_connection_string_is_quoted diperkenalkan di PHP 8.2;odbc_connection_string_should_quote diperkenalkan di PHP 8.2;odbc_connection_string_quote diperkenalkan di PHP 8.2;ini_parse_quantity diperkenalkan di PHP 8.2;json_validate diperkenalkan di PHP 8.3;Override yang diperkenalkan di PHP 8.3;mb_str_pad diperkenalkan di PHP 8.3;ldap_exop_sync yang diperkenalkan di PHP 8.3;ldap_connect_wallet yang diperkenalkan di PHP 8.3;stream_context_set_options diperkenalkan di PHP 8.3;str_increment dan str_decrement yang diperkenalkan di PHP 8.3;Date*Exception/Error yang diperkenalkan di PHP 8.3;SQLite3Exception yang diperkenalkan di PHP 8.3;mb_ucfirst dan mb_lcfirst yang diperkenalkan di PHP 8.4;array_find , array_find_key , array_any dan array_all yang diperkenalkan di PHP 8.4;Deprecated yang diperkenalkan di PHP 8.4;mb_trim , mb_ltrim dan mb_rtrim diperkenalkan di PHP 8.4;CURL_HTTP_VERSION_3 dan CURL_HTTP_VERSION_3ONLY yang diperkenalkan di PHP 8.4;Sangat disarankan untuk meningkatkan versi PHP Anda dan/atau menginstal ekstensi yang hilang bila memungkinkan. Polyfill ini sebaiknya digunakan hanya ketika tidak ada pilihan yang lebih baik atau ketika portabilitas merupakan suatu persyaratan.
Untuk menulis kode portabel antara PHP5 dan PHP7, beberapa kehati-hatian harus dilakukan:
*Error harus ditangkap sebelum Exception ;error_clear_last() , hasil $e = error_get_last() harus diverifikasi menggunakan isset($e['message'][0]) alih-alih null !== $e . Saat menggunakan Composer untuk mengelola dependensi Anda, Anda tidak require paket symfony/polyfill , melainkan paket mandiri:
symfony/polyfill-apcu untuk menggunakan fungsi apcu_* ,symfony/polyfill-ctype untuk menggunakan fungsi ctype,symfony/polyfill-php54 untuk menggunakan fungsi PHP 5.4,symfony/polyfill-php55 untuk menggunakan fungsi PHP 5.5,symfony/polyfill-php56 untuk menggunakan fungsi PHP 5.6,symfony/polyfill-php70 untuk menggunakan fungsi PHP 7.0,symfony/polyfill-php71 untuk menggunakan fungsi PHP 7.1,symfony/polyfill-php72 untuk menggunakan fungsi PHP 7.2,symfony/polyfill-php73 untuk menggunakan fungsi PHP 7.3,symfony/polyfill-php74 untuk menggunakan fungsi PHP 7.4,symfony/polyfill-php80 untuk menggunakan fungsi PHP 8.0,symfony/polyfill-php81 untuk menggunakan fungsi PHP 8.1,symfony/polyfill-php82 untuk menggunakan fungsi PHP 8.2,symfony/polyfill-php83 untuk menggunakan fungsi PHP 8.3,symfony/polyfill-php84 untuk menggunakan fungsi PHP 8.4,symfony/polyfill-iconv untuk menggunakan fungsi iconv,symfony/polyfill-intl-grapheme untuk menggunakan fungsi grapheme_* ,symfony/polyfill-intl-idn untuk menggunakan fungsi idn_to_ascii dan idn_to_utf8 ,symfony/polyfill-intl-icu untuk menggunakan fungsi dan kelas intl,symfony/polyfill-intl-messageformatter untuk menggunakan formatter pesan intl,symfony/polyfill-intl-normalizer untuk menggunakan normalizer intl,symfony/polyfill-mbstring untuk menggunakan fungsi mbstring,symfony/polyfill-util untuk menggunakan pembantu utilitas polyfill.symfony/polyfill-uuid untuk menggunakan fungsi uuid_* , Membutuhkan symfony/polyfill secara langsung akan mencegah Komposer membagikan polyfill dengan benar dalam grafik ketergantungan. Dengan demikian, kemungkinan besar akan menginstal lebih banyak kode daripada yang dibutuhkan.
Paket ini dirancang untuk overhead rendah dan polyfilling berkualitas tinggi.
Ia hanya menambahkan beberapa pernyataan require ringan ke proses bootstrap untuk mendukung semua polyfill. Implementasi kemudian dimuat sesuai permintaan bila diperlukan selama eksekusi kode.
Jika proyek Anda memerlukan versi PHP minimum, disarankan untuk menambahkan polyfill untuk versi PHP yang lebih rendah ke bagian replace composer.json Anda. Ini menghilangkan semua overhead dari polyfill ini karena mereka tidak lagi menjadi bagian dari proyek Anda. Hal yang sama dapat dilakukan untuk polyfill untuk ekstensi yang Anda perlukan.
Jika proyek Anda memerlukan php 7.0, dan memerlukan ekstensi mb, bagian penggantian akan terlihat seperti ini:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}Polyfill diuji unit bersamaan dengan implementasi aslinya sehingga kesamaan fitur dan perilaku dapat dibuktikan dan diterapkan dalam jangka panjang.
Perpustakaan ini dirilis di bawah lisensi MIT.