"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل الأخطاء عند تمرير مجموعة من الكائنات كوسيطات دالة؟

كيفية حل الأخطاء عند تمرير مجموعة من الكائنات كوسيطات دالة؟

تم النشر بتاريخ 2024-11-08
تصفح:318

How to Resolve Errors When Passing an Array of Objects as Function Arguments?

تلميح النوع: مصفوفة من الكائنات

عند تمرير مصفوفة من الكائنات كوسيطة إلى دالة، قد تواجه خطأ إذا كان لم يتم تحديد نوع الوسيطة. على سبيل المثال، خذ بعين الاعتبار الكود التالي:

class Foo {}

function getFoo(Foo $f) {}

ستؤدي محاولة تمرير مصفوفة من كائنات Foo إلى getFoo إلى خطأ فادح:

Argument 1 passed to getFoo() must be an instance of Foo, array given

للتغلب على هذه المشكلة، يمكنك تحديد نوع الوسيطة كمصفوفة من نوع الكائن المطلوب باستخدام فئة مخصصة. على سبيل المثال، يمكن تعريف فئة ArrayOfFoo على النحو التالي:

class ArrayOfFoo extends \ArrayObject {
    public function offsetSet($key, $val) {
        if ($val instanceof Foo) {
            return parent::offsetSet($key, $val);
        }
        throw new \InvalidArgumentException('Value must be a Foo');
    }
}

تضمن هذه الفئة إمكانية تعيين كائنات Foo فقط لعناصرها. يمكن بعد ذلك تحديث وظيفة getFoo لقبول وسيطة ArrayOfFoo:

function getFoo(ArrayOfFoo $foos) {
    foreach ($foos as $foo) {
        // ...
    }
}

الآن، تمرير مجموعة من كائنات Foo إلى getFoo سيعمل كما هو متوقع.

بدلاً من ذلك، يمكن استخدام مكتبة Haldayne لتبسيط العملية:

class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
    protected function allowed($value) { return $value instanceof Foo; }
}

توفر هذه الفئة عمليات فحص مضمنة للتأكد من السماح بكائنات Foo فقط في المصفوفة.

بيان الافراج أعيد طبع هذه المقالة على: 1729205596 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3