أثناء العمل على مشاريع WordPress باستخدام PHP 8.x، قد تواجه الخطأ التالي:
خطأ فادح: لم يتم اكتشاف PHP_CodeSniffer\Exceptions\RuntimeException: Trim(): تم إهمال تمرير قيمة فارغة إلى المعلمة رقم 1 ($string) من سلسلة النوع في /path/...
يحدث هذا الخطأ بسبب تحذير الإهمال في PHP 8.x، حيث لم يعد تمرير القيمة null إلى الدالة Trim() مسموحًا به. على وجه التحديد، تنشأ هذه المشكلة ضمن معايير ترميز WordPress (WPCS)، وهي جزء من إعداد PHP_CodeSniffer. اعتبارًا من تاريخ كتابة هذه السطور، حتى مع أحدث الإصدارات من PHP_CodeSniffer وWordPress Coding Standards، لا تزال هذه المشكلة قائمة.
PHP_CodeSniffer هي أداة تساعد المطورين في الحفاظ على معايير البرمجة عن طريق التحقق من كود PHP الخاص بهم بحثًا عن انتهاكات القواعد المحددة. توفر معايير الترميز في WordPress (WPCS) مجموعة من الإرشادات لكتابة تعليمات برمجية متسقة ونظيفة في مشاريع WordPress. يشير الخطأ المذكور أعلاه عادةً إلى أن مقتطف التعليمات البرمجية لا يلتزم بهذه المعايير بسبب التغييرات في سلوك PHP.
لإصلاح ذلك، يمكننا تعديل الملف الذي يسبب المشكلة يدويًا، وتحديد السطر الذي يتم استدعاء Trim() فيه وتحديث الكود لضمان معالجة القيم الخالية بشكل صحيح عند استدعاء Trim().
على سبيل المثال، في الملف vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php، حدد موقع السطر 280 واستبدل السطر التالي:
// this $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ); // to this $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );
ومع ذلك، كما هو الحال في الكثير من القرارات المتعلقة بتطوير البرمجيات، فقط لأنك تستطيع القيام بذلك، لا يعني أنه يجب عليك.
على الرغم من أن الطريقة السابقة قد تؤدي إلى إصلاح الخطأ، فمن المهم أن تتذكر أن تعديل ملفات البائع ليس حلاً مستدامًا. سيتم فقدان التغييرات في كل مرة تقوم فيها بتحديث تبعياتك عبر Composer.
الطريقة الأفضل إذن هي إنشاء ملف تصحيح.
إليك دليل خطوة بخطوة حول كيفية إنشاء تصحيح للمشكلة وتطبيقه
الحل الأكثر قوة هو إنشاء ملف تصحيح. تتيح لك هذه الطريقة تطبيق تغييراتك تلقائيًا في كل مرة تقوم فيها بتثبيت أو تحديث تبعياتك.
ملف التصحيح هو ملف نصي يحتوي على الاختلافات بين نسختين من الملف - بشكل أساسي لقطة "قبل" و"بعد".
في دليل المشروع الخاص بك، قم بإنشاء مجلد للاحتفاظ بملف التصحيح:
تصحيحات mkdir -p
داخل مجلد التصحيحات/، قم بإنشاء ملف تصحيح جديد يسمى Fix-null-trim.patch. يمكنك القيام بذلك باستخدام محرر النصوص الخاص بك:
تصحيحات اللمس/fix-null-trim.patch
افتحfix-null-trim.patch في محرر النصوص لديك وأضف المحتوى التالي:
--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -280,7 280,7 @@ // Original code with `trim()` // Update this line: - $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) ); $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php @@ -194,7 194,7 @@ // Original code with `trim()` // Update this line: - $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) ); $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php @@ -1144,7 1144,7 @@ // Original code with `trim()` // Update this line: - $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) ); $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
يطلب هذا التصحيح من Composer استبدال السطر الذي به مشكلة في PrefixAllGlobalsSniff.php بإصدار أكثر أمانًا يستخدم عامل الدمج الفارغ (؟؟) لتجنب تمرير القيمة الخالية إلى القطع ().
بعد ذلك، تحتاج إلى توجيه Composer لتطبيق هذا التصحيح تلقائيًا عندما تقوم بتثبيت أو تحديث التبعيات الخاصة بك.
افتح ملف Composer.json الخاص بمشروعك. أضف التكوين التالي ضمن قسم "إضافي". إذا لم يكن القسم "الإضافي" موجودًا بالفعل، فستحتاج إلى إنشائه.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
يُخبر هذا الملحن بتطبيق ملف Fix-null-trim.patch على حزمة wp-coding-standards/wpcs عندما يقوم بتثبيت التبعيات أو تحديثها.
لتطبيق التصحيحات عبر Composer، تحتاج إلى البرنامج المساعد Composer-patches. قم بتشغيل الأمر التالي للتثبيت:
يتطلب الملحن أدوات cweagans/تصحيحات الملحن
الآن، يمكنك تطبيق التصحيح عن طريق تشغيل الأمر التالي:
تثبيت الملحن
أثناء التثبيت، سيقوم Composer بتطبيق التصحيح من المجلد/التصحيحات على ملف PrefixAllGlobalsSniff.php.
من خلال إنشاء وتطبيق ملف التصحيح ، فإنك تضمن أن إصلاحاتك تستمر عبر تحديثات Composer ، مع الالتزام بأفضل الممارسات في تطوير البرامج. راقب بانتظام تحديثات PHP_CodeSniffer وWordPress Coding Standards، حيث قد يتم حل هذه المشكلات في الإصدارات المستقبلية. لا يؤدي هذا النهج الاستباقي إلى تحسين جودة التعليمات البرمجية فحسب، بل يعمل أيضًا على تحسين سير عمل التطوير في بيئات PHP 8.x.
لقد قمت بمشاركة ملف التصحيح في هذا Gist. لا تتردد في استخدامه كمرجع لتنفيذ إصلاحات مماثلة في مشاريعك!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3