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