انتقل إلى محتوى الدرس

Callable Objects with __invoke استدعاء الكائن كدالة برمجية عبر __invoke

خصّص سلوك الكائنات في PHP 8 عبر الدوال السحرية __toString و__invoke و__clone، وافهم النسخ السطحي والعميق ومقارنة الكائنات.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يتيح تعريف الدالة السحرية __invoke() استدعاء الكائن مباشرة بالأقواس $object($arg) وكأنه دالة برمجية.

  • أي كائن يحتوي على __invoke() يحقق شرط النوع callable ويمكن تمريره إلى دوال مثل array_map() وarray_filter().
  • على عكس الدالة العادية، يمكن للكائن القابل للاستدعاء الاحتفاظ بإعدادات مسبقة عبر دالة البناء مع العمل كصنف ذي مهمة واحدة.
  • تُستخدم __invoke() بكثرة في المتحكمات أحادية المهمة (Single-Action Controllers) والطبقات الوسيطة (Middleware).

تم تمرير الكائن new MinPriceFilter(100) مباشرة كدالة رد نداء إلى array_filter() التي تستدعي __invoke($price) لكل عنصر.

PHP
<?php
class MinPriceFilter {
    public function __construct(private int $min) {}
    public function __invoke(int $price): bool {
        return $price >= $this->min;
    }
}
$prices = [40, 120, 85, 210];
$kept = array_values(array_filter($prices, new MinPriceFilter(100)));
echo implode(", ", $kept) . "\n";