"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يؤدي `array_shift()` إلى تفعيل "معايير صارمة: يجب تمرير المتغيرات فقط حسب المرجع"؟

لماذا يؤدي `array_shift()` إلى تفعيل "معايير صارمة: يجب تمرير المتغيرات فقط حسب المرجع"؟

تم النشر بتاريخ 2024-12-21
تصفح:876

Why Does `array_shift()` Trigger

رسالة الخطأ "معايير صارمة: يجب تمرير المتغيرات فقط حسب المرجع"

عند استخدام array_shift()، قد يُبلغ عن معايير صارمة تحذير إذا كانت الوسيطة التي تم تمريرها هي نتيجة استدعاء دالة. يبدو أن هذا السلوك غير متناسق، لأنه لا يؤدي دائمًا إلى تشغيل التحذير.

ضع في اعتبارك الكود التالي:

$el = array_shift($instance->find(..))

في هذا المثال، يتم رفع التحذير لأن طريقة البحث () ليست متغيرة. ومع ذلك، التعليمة البرمجية التالية لا تنتج تحذيرا:

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

لفهم هذا السلوك، دعنا نحلل مقتطف كود مختلف:

error_reporting(E_STRICT);
class test {
    function test_arr(&$a) {
        var_dump($a);
    }
    function get_arr() {
        return array(1, 2);
    }
}

$t = new test;
$t->test_arr($t->get_arr());

يُنشئ هذا الرمز تحذيرًا بشأن المعايير الصارمة لأن الأسلوب $t->get_arr() ليس متغيرًا ويتم تمريره حسب المرجع. يعتبر هذا السلوك غير بديهي لأن الطريقة ترجع قيمة صفيف.

لتجنب هذا الخطأ في الوضع الصارم، قم إما بتغيير توقيع الطريقة لتجنب استخدام مرجع أو استخدام متغير وسيط:

function test_arr($a) {
    var_dump($a);
}

$inter = get_arr();
$el = array_shift($inter);
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3