تلميح النوع: مصفوفة من الكائنات
عند تمرير مصفوفة من الكائنات كوسيطة إلى دالة، قد تواجه خطأ إذا كان لم يتم تحديد نوع الوسيطة. على سبيل المثال، خذ بعين الاعتبار الكود التالي:
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 فقط في المصفوفة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3