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

First-Class Callable Syntax in PHP 8.1+ صيغة الإشارة للدوال الحديثة strlen(...) في PHP 8.1+

استقبل عدداً مرناً من المعاملات عبر معامل التجميع (...$args)، وفكك المصفوفات عند الاستدعاء، وتحقق من وجود الدوال بـ function_exists.
1 صفوف تعليمية
PHP
0 مشاهدة

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

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

بدءاً من PHP 8.1، تتيح كتابة ثلاث نقاط داخل قوسي الدالة مثل strlen(...) أو trim(...) إنشاء مرجع مباشر للدالة يدعم الإكمال التلقائي في المحررات بدلاً من كتابة اسمها كنص.

  • على عكس كتابة اسم الدالة كنص ("trim")، تخضع صيغة trim(...) للفحص الثابت وتدعم إعادة التسمية الآمنة في بيئات التطوير.
  • لاحظ الفرق الدقيق: كتابة myFunc(...$arr) تستدعي الدالة فوراً بتفكيك المصفوفة، بينما كتابة myFunc(...) لا تستدعيها بل ترجع كائن Closure يشير إليها.
  • مرر هذا المرجع مباشرة إلى دوال مثل array_map(trim(...), $inputs).

تلتقط formatSku(...) إشارة مرجعية للدالة داخل $formatter دون تنفيذها، ثم تطبقها array_map() على كل عنصر.

الصيغةالمصطلحالسلوك البرمجي
function f(...$a)معامل متغير الطول (Variadic)يجمع الوسائط الممررة داخل مصفوفة $a
f(...$arr)تفكيك المصفوفة عند الاستدعاءيفكك عناصر $arr كوسائط مستقلة للدالة
function f(&$x)التمرير بالمرجع (By Reference)يعدّل المتغير الأصلي $x مباشرة
$fn($arg)دالة متغيرة (Variable Function)يستدعي الدالة التي يحمل المتغير النصي $fn اسمها
f(...)مرجع دالة من الدرجة الأولى (8.1+)يرجع كائن Closure يشير إلى الدالة f دون تنفيذها
PHP
<?php
function formatSku($raw) {
    return "SKU-" . strtoupper(trim($raw));
}

$formatter = formatSku(...);
$items     = ["  kb90 ", " ms20 "];
$mapped    = array_map($formatter, $items);

echo implode(" | ", $mapped) . "\n";
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

بدءاً من PHP 8.1، تتيح كتابة ثلاث نقاط داخل قوسي الدالة مثل strlen(...) أو trim(...) إنشاء مرجع مباشر للدالة يدعم الإكمال التلقائي في المحررات بدلاً من كتابة اسمها كنص. على عكس كتابة اسم الدالة كنص ("trim")، تخضع صيغة trim(...) للفحص الثابت وتدعم إعادة التسمية الآمنة في بيئات التطوير. لاحظ الفرق الدقيق: كتابة myFunc(...$arr) تستدعي الدالة فوراً بتفكيك المصفوفة، بينما كتابة myFunc(...) لا تستدعيها بل ترجع كائن Closure يشير إليها. مرر هذا المرجع مباشرة إلى دوال مثل array_map(trim(...), $inputs).