شرح صفوف ومحتوى الفقرة
يتيح تعريف الدالة السحرية __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";