البرمجة الوظيفية في PHP: من الأساسيات إلى التطبيق العملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

البرمجة الوظيفية في PHP: نهج حديث لكتابة الكود

يرتبط PHP تقليديًا بأنماط البرمجة الأمرية والموجهة للكائنات. ومع ذلك، مع إصدار الإصدارات 7.4 و 8.0 و 8.1، اكتسبت اللغة أدوات قوية لـ البرمجة الوظيفية (FP). يسمح لك هذا النهج النموذجي بكتابة كود أكثر قابلية للتنبؤ والاختبار والإيجاز، خاصة عند العمل مع المصفوفات والمجموعات والمهام غير المتزامنة. في هذه المقالة، سنقوم بتفصيل المفاهيم الأساسية للبرمجة الوظيفية في PHP ونوضح كيفية تطبيقها عمليًا.



1. أساسيات البرمجة الوظيفية في PHP

تُبنى البرمجة الوظيفية على عدة مبادئ أساسية:

  • الدوال البحتة — تعتمد النتيجة فقط على الوسائط، دون آثار جانبية.
  • الثبات — لا يتم تغيير البيانات، بل يتم إنشاء نسخ جديدة.
  • الدوال عالية الترتيب — دوال تأخذ دوال أخرى كوسائط أو تُعيدها.
  • العودية — استبدال الحلقات بدوال تستدعي نفسها بنفسها.

يدعم PHP هذه المفاهيم بفضل الدوال المجهولة (الإغلاقات)، دوال الأسهم (منذ PHP 7.4)، ودوال المصفوفات المدمجة.



// مثال على دالة بحتةfunction add(int $a, int $b): int {    return $a + $b;}

// مثال على دالة مجهولة (إغلاق)$multiply = function(int $x, int $y): int { return $x * $y;};

echo $multiply(3, 4); // 12

هام: يجب ألا تقوم الدوال البحتة في PHP بتعديل المتغيرات العامة أو تنفيذ عمليات الإدخال/الإخراج (مثل echo). يضمن ذلك قابلية التنبؤ ويبسط عملية التصحيح.



2. الدوال المجهولة والإغلاقات ودوال الأسهم

الدوال المجهولة (الإغلاقات) هي دوال بدون اسم يمكن تمريرها كوسائط أو تعيينها لمتغيرات. يمكنها التقاط المتغيرات من النطاق الخارجي باستخدام الكلمة المفتاحية use.



$factor = 2;$double = function(int $value) use ($factor): int {    return $value * $factor;};

echo $double(5); // 10

منذ PHP 7.4، ظهرت دوال الأسهم — وهي صيغة أكثر إيجازًا للإغلاقات ذات السطر الواحد. تقوم تلقائيًا بالتقاط المتغيرات من النطاق.



$factor = 2;$double = fn(int $value): int => $value * $factor;

echo $double(5); // 10

متى تستخدم: دوال الأسهم مثالية للتحويلات البسيطة (مثل في array_map)، بينما تكون الإغلاقات التقليدية أفضل للمنطق المعقد ذي العبارات المتعددة.



3. الدوال عالية الترتيب: map, filter, reduce

في PHP، تُستخدم الدوال المدمجة للعمل مع المصفوفات بأسلوب وظيفي:

  • array_map() — تطبق دالة على كل عنصر من عناصر المصفوفة.
  • array_filter() — ترشح المصفوفة بناءً على شرط.
  • array_reduce() — تختزل المصفوفة إلى قيمة واحدة.


$numbers = [1, 2, 3, 4, 5, 6];

// map: مضاعفة كل عنصر$doubled = array_map(fn($n) => $n * 2, $numbers);print_r($doubled); // [2, 4, 6, 8, 10, 12]

// filter: الاحتفاظ فقط بالأرقام الزوجية$even = array_filter($numbers, fn($n) => $n % 2 === 0);print_r(array_values($even)); // [2, 4, 6]

// reduce: مجموع كل العناصر$sum = array_reduce($numbers, fn($carry, $n) => $carry + $n, 0);echo $sum; // 21

نصيحة: استخدم array_values() بعد array_filter() لإعادة تعيين مفاتيح المصفوفة، وإلا فقد تكون غير متسلسلة.



تسمح لك هذه الدوال باستبدال حلقات foreach بسلاسل استدعاء تصريحية، مما يجعل الكود أكثر قابلية للقراءة وأقل عرضة للأخطاء.

المدونات

توصيات الكتب