🧩 أنواع الدوال في PHP
الدوال المعرفة مسبقًا (Built-in Functions)
الدوال المعرفة من قبل المستخدم (User-defined Functions)
الدوال المجهولة (Anonymous Functions / Closures)
الدوال السهمية (Arrow Functions)
الدوال القابلة للنداء (Callable Functions)
✍️ إنشاء [شركة برمجة مصرية] دالة [شركة برمجة مصرية] بسيطة (للمراجعة السريعة)
<?php
function sayHello($name) {
return "Hello, $name!";
}
echo sayHello("Ahmed"); // Hello, Ahmed!
?>
🔁 الدوال العودية (Recursive Functions)
الدالة التي تستدعي نفسها. مثال لحساب المضروب:
<?php
function factorial($n) {
if ($n <= 1) return 1;
return $n * factorial($n - 1);
}
echo factorial(5); // 120
?>
🕳️ الدوال المجهولة (Closures) واستخدامها مع array_map / array_filter
<?php
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(function($n) {
return $n * $n;
}, $numbers);
print_r($squared);
// [1, 4, 9, 16, 25]
?>
🏹 الدوال السهمية (Arrow Functions)
تم تقديمها في PHP 7.4 وتُستخدم لكتابة دوال مختصرة:
<?php
$numbers = [1, 2, 3];
$doubled = array_map(fn($n) => $n * 2, $numbers);
print_r($doubled);
// [2, 4, 6]
?>
✅ الفرق الرئيسي أن fn() تستخدم الربط التلقائي للمتغيرات الخارجية (lexical scoping) دون الحاجة لكلمة use.
🧠 تمرير الدوال كـ Callback (الدوال القابلة للنداء)
<?php
function process($arr, callable $callback) {
foreach ($arr as $item) {
echo $callback($item) . PHP_EOL;
}
}
process([1, 2, 3], function($n) {
return $n * 10;
});
?>
📦 استخدام Closures مع المتغيرات الخارجية
<?php
function counter() {
$count = 0;
return function() use (&$count) {
return ++$count;
};
}
$next = counter();
echo $next(); // 1
echo $next(); // 2
?>
🧬 الدوال المتعددة الوسائط (Variadic Functions)
تتيح لك استقبال عدد غير معروف من المعطيات:
<?php
function sumAll(...$nums) {
return array_sum($nums);
}
echo sumAll(1, 2, 3, 4); // 10
?>
🛡️ التحقق من نوع المتغيرات (Type Hinting) والعودة (Return Type)
<?php
function multiply(float $a, float $b): float {
return $a * $b;
}
echo multiply(2.5, 4); // 10
?>
🧰 استخدام دوال كـ Strategy Design Pattern
<?php
function calculate($a, $b, callable $operation) {
return $operation($a, $b);
}
$add = fn($x, $y) => $x + $y;
$sub = fn($x, $y) => $x - $y;
echo calculate(10, 5, $add); // 15
echo calculate(10, 5, $sub); // 5
?>
🧪 اختبار دوالك بطريقة ديناميكية (Dynamic Function Invocation)
<?php
function greet($name) {
return "Welcome $name!";
}
$func = "greet";
echo $func("Sara"); // Welcome Sara!
?>
💡 نصائح عملية عند استخدام الدوال
اجعل الدوال تؤدي مهمة واحدة فقط (Single Responsibility).
لا تكتب دوال ضخمة – قسم المهام الكبيرة إلى دوال صغيرة.
استخدم التوثيق الجيد داخل التعليقات (/** */) لفهم الدوال بسهولة.
جرّب جعل دوالك “pure” أي أنها لا تعتمد على متغيرات خارجية ولا تغيّرها.
📌 خلاصة
الدوال في PHP أكثر من مجرد أدوات لتقسيم الكود – إنها طريقة تفكير برمجية. باستخدام المفاهيم المتقدمة مثل الإغلاق، الأنماط، والدوال القابلة للنداء، يمكنك بناء تطبيقات قوية، قابلة للتوسعة، وصيانتها أسهل.
🧠 كلما أتقنت استخدام الدوال بذكاء، كلما أصبح كودك أنظف وأكثر احترافية.
