يدعم هذا المشروع الميزات الموجودة في أحدث إصدارات PHP ويوفر طبقات توافق لبعض الامتدادات والوظائف. الغرض منه هو استخدامه عند الرغبة في إمكانية النقل عبر إصدارات PHP وملحقاتها.
يتم توفير Polyfills لـ:
apcu عند تثبيت ملحق apc القديم؛ctype عندما يتم تجميع PHP بدون ctype؛mbstring و iconv ؛uuid ؛MessageFormatter ووظائف msgfmt_format_message ؛Normalizer ووظائف grapheme_* ؛utf8_encode و utf8_decode من ملحق xml أو PHP-7.2 الأساسي؛Collator و NumberFormatter و Locale و IntlDateFormatter ، والتي تقتصر على اللغة "en"؛intl_error_name و intl_get_error_code و intl_get_error_message و intl_is_failure ؛idn_to_ascii و idn_to_utf8 ؛Binary التي سيتم استخدامها عندما يكون التوافق مع mbstring.func_overload مطلوبًا؛spl_object_id و stream_isatty المقدمة في PHP 7.2؛mb_ord و mb_chr و mb_scrub المقدمة في PHP 7.2 من ملحق mbstringsapi_windows_vt100_support (Windows فقط) المقدمة في PHP 7.2؛PHP_FLOAT_* المقدم في PHP 7.2؛PHP_OS_FAMILY المقدم في PHP 7.2؛is_countable المقدمة في PHP 7.3؛array_key_first و array_key_last المقدمتان في PHP 7.3؛hrtime المقدمة في PHP 7.3؛JsonException المقدمة في PHP 7.3؛get_mangled_object_vars و mb_str_split و password_algos المقدمة في PHP 7.4؛fdiv المقدمة في PHP 8.0؛get_debug_type المقدمة في PHP 8.0؛preg_last_error_msg المقدمة في PHP 8.0؛str_contains المقدمة في PHP 8.0؛str_starts_with و str_ends_with المقدمة في PHP 8.0؛ValueError المقدمة في PHP 8.0؛UnhandledMatchError المقدمة في PHP 8.0؛FILTER_VALIDATE_BOOL المقدم في PHP 8.0؛get_resource_id المقدمة في PHP 8.0؛Attribute المقدمة في PHP 8.0؛Stringable المقدمة في PHP 8.0؛PhpToken التي تم تقديمها في PHP 8.0 عند تمكين ملحق الرمز المميز؛array_is_list المقدمة في PHP 8.1؛enum_exists المقدمة في PHP 8.1؛MYSQLI_REFRESH_REPLICA المقدم في PHP 8.1؛ReturnTypeWillChange المقدمة في PHP 8.1؛CURLStringFile المقدمة في PHP 8.1 (ولكن فقط إذا تم استخدام PHP >= 7.4)؛AllowDynamicProperties المقدمة في PHP 8.2؛SensitiveParameter المقدمة في PHP 8.2؛SensitiveParameterValue المقدمة في PHP 8.2؛RandomEngine المقدمة في PHP 8.2؛RandomCryptoSafeEngine المقدمة في PHP 8.2؛RandomEngineSecure المقدمة في PHP 8.2 (راجع arokettu/random-polyfill لمزيد من المحركات)؛odbc_connection_string_is_quoted المقدمة في PHP 8.2؛odbc_connection_string_should_quote المقدمة في PHP 8.2؛odbc_connection_string_quote المقدمة في PHP 8.2؛ini_parse_quantity المقدمة في PHP 8.2؛json_validate المقدمة في PHP 8.3؛Override المقدمة في PHP 8.3؛mb_str_pad المقدمة في PHP 8.3؛ldap_exop_sync المقدمة في PHP 8.3؛ldap_connect_wallet المقدمة في PHP 8.3؛stream_context_set_options المقدمة في PHP 8.3؛str_increment و str_decrement المقدمة في PHP 8.3؛Date*Exception/Error المقدمة في PHP 8.3؛SQLite3Exception المقدمة في PHP 8.3؛mb_ucfirst و mb_lcfirst المقدمتان في PHP 8.4؛array_find و array_find_key و array_any و array_all المقدمة في PHP 8.4؛Deprecated المقدمة في PHP 8.4؛mb_trim و mb_ltrim و mb_rtrim المقدمة في PHP 8.4؛CURL_HTTP_VERSION_3 و CURL_HTTP_VERSION_3ONLY المقدمة في PHP 8.4؛يوصى بشدة بترقية إصدار PHP الخاص بك و/أو تثبيت الملحقات المفقودة كلما أمكن ذلك. يجب استخدام هذه الحشوة المتعددة فقط عندما لا يكون هناك خيار أفضل أو عندما تكون إمكانية النقل مطلوبة.
لكتابة تعليمات برمجية محمولة بين PHP5 وPHP7، يجب اتخاذ بعض الحذر:
*Error قبل Exception ;error_clear_last() ، يجب التحقق من نتيجة $e = error_get_last() باستخدام isset($e['message'][0]) بدلاً من null !== $e . عند استخدام Composer لإدارة تبعياتك، لا يجب require حزمة symfony/polyfill ، بل إلى الحزمة المستقلة:
symfony/polyfill-apcu لاستخدام وظائف apcu_* ،symfony/polyfill-ctype لاستخدام وظائف ctype،symfony/polyfill-php54 لاستخدام وظائف PHP 5.4،symfony/polyfill-php55 لاستخدام وظائف PHP 5.5،symfony/polyfill-php56 لاستخدام وظائف PHP 5.6،symfony/polyfill-php70 لاستخدام وظائف PHP 7.0،symfony/polyfill-php71 لاستخدام وظائف PHP 7.1،symfony/polyfill-php72 لاستخدام وظائف PHP 7.2،symfony/polyfill-php73 لاستخدام وظائف PHP 7.3،symfony/polyfill-php74 لاستخدام وظائف PHP 7.4،symfony/polyfill-php80 لاستخدام وظائف PHP 8.0،symfony/polyfill-php81 لاستخدام وظائف PHP 8.1،symfony/polyfill-php82 لاستخدام وظائف PHP 8.2،symfony/polyfill-php83 لاستخدام وظائف PHP 8.3،symfony/polyfill-php84 لاستخدام وظائف PHP 8.4،symfony/polyfill-iconv لاستخدام وظائف Iconv،symfony/polyfill-intl-grapheme لاستخدام وظائف grapheme_* ،symfony/polyfill-intl-idn لاستخدام الدالتين idn_to_ascii و idn_to_utf8 ،symfony/polyfill-intl-icu لاستخدام الدوال والفئات intl،symfony/polyfill-intl-messageformatter لاستخدام تنسيق الرسالة intl،symfony/polyfill-intl-normalizer لاستخدام أداة التسوية الدولية،symfony/polyfill-mbstring لاستخدام وظائف mbstring،symfony/polyfill-util لاستخدام الأدوات المساعدة polyfill.symfony/polyfill-uuid لاستخدام وظائف uuid_* ، إن طلب symfony/polyfill مباشرة سيمنع الملحن من مشاركة polyfills بشكل صحيح في الرسوم البيانية التبعية. على هذا النحو، من المحتمل أن يقوم بتثبيت تعليمات برمجية أكثر مما هو مطلوب.
تم تصميم هذه الحزمة من أجل حشو بوليستر منخفض الجودة وعالي الجودة.
فهو يضيف فقط عددًا قليلًا من عبارات require خفيفة الوزن إلى عملية التمهيد لدعم جميع عمليات التعبئة المتعددة. يتم بعد ذلك تحميل عمليات التنفيذ عند الطلب عند الحاجة أثناء تنفيذ التعليمات البرمجية.
إذا كان مشروعك يتطلب الحد الأدنى من إصدار PHP، فمن المستحسن إضافة ملفات polyfills لإصدارات PHP الأقل إلى قسم replace في composer.json الخاص بك. يؤدي هذا إلى إزالة أي حمل إضافي من هذه الحشوات المتعددة لأنها لم تعد جزءًا من مشروعك. يمكن فعل الشيء نفسه بالنسبة للحشوات المتعددة للملحقات التي تحتاجها.
إذا كان مشروعك يتطلب PHP 7.0، ويحتاج إلى الامتداد mb، فسيبدو قسم الاستبدال كما يلي:
{
"replace" : {
"symfony/polyfill-php54" : " * " ,
"symfony/polyfill-php55" : " * " ,
"symfony/polyfill-php56" : " * " ,
"symfony/polyfill-php70" : " * " ,
"symfony/polyfill-mbstring" : " * "
}
}يتم اختبار Polyfills جنبًا إلى جنب مع تنفيذها الأصلي بحيث يمكن إثبات تكافؤ الميزات والسلوك وتنفيذه على المدى الطويل.
تم إصدار هذه المكتبة بموجب ترخيص MIT.