البرمجة الوظيفية في PHP: من الألف إلى الياء — دليل شامل

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

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

ابدأ الدورة

مقدمة في البرمجة الوظيفية في PHP



البرمجة الوظيفية (FP) هي نموذج يتم فيه التعامل مع العمليات الحسابية كحساب للدوال الرياضية، مع تجنب تغيير الحالة والبيانات القابلة للتغيير. على الرغم من أن PHP تم إنشاؤها في الأصل كلغة أمرية، إلا أنه بدءًا من الإصدار 5.3 (عام 2009) تمت إضافة أدوات قوية للنمط الوظيفي إليها: الدوال المجهولة، الإغلاقات، دعم دوال الترتيب الأعلى، وغير ذلك الكثير.



في هذه المقالة، سنشرح جميع المفاهيم الأساسية للبرمجة الوظيفية في PHP — من الدوال المجهولة الأساسية إلى التقنيات المتقدمة مثل الكاري وتركيب الدوال. ستتعلم كيفية كتابة كود أكثر نظافة وقابلية للتنبؤ والاختبار.



1. الدوال المجهولة والإغلاقات (Closures)



الدوال المجهولة



الدالة المجهولة (لامدا) هي دالة بدون اسم. يمكن تعيينها لمتغير، أو تمريرها كوسيط، أو إرجاعها من دالة أخرى.



<?php// دالة مجهولة عادية$square = function($n) {    return $n * $n;};

echo $square(5); // 25

// دالة مجهولة كاستدعاء رجعي لـ array_map$numbers = [1, 2, 3, 4];$squared = array_map(function($n) { return $n * $n;}, $numbers);

print_r($squared); // [1, 4, 9, 16]?>


الإغلاقات (Closures)



الإغلاق هو دالة مجهولة يمكنها التقاط المتغيرات من النطاق الخارجي باستخدام الكلمة المفتاحية use. هذه واحدة من أقوى ميزات البرمجة الوظيفية في PHP.



<?php$multiplier = 3;

$multiply = function($n) use ($multiplier) { return $n * $multiplier;};

echo $multiply(10); // 30

// متغير قابل للتغيير (يتم تمريره بالمرجع)$counter = 0;$increment = function() use (&$counter) { $counter++;};

$increment();$increment();echo $counter; // 2?>


2. الدوال النقية وثبات البيانات



الدوال النقية



الدالة النقية هي دالة:

  • تعيد دائمًا نفس النتيجة لنفس الوسائط (حتمية)
  • ليس لها آثار جانبية (لا تغير المتغيرات الخارجية، لا تُخرج بيانات، لا تتعامل مع قاعدة البيانات)


<?php// دالة غير نقية (تعتمد على متغير عام)$taxRate = 0.2;function calculatePriceDirty($price) {    global $taxRate;    return $price * (1 + $taxRate);}

// دالة نقيةfunction calculatePricePure($price, $taxRate) { return $price * (1 + $taxRate);}

echo calculatePricePure(100, 0.2); // 120 — دائمًا يمكن التنبؤ بها?>


ثبات البيانات (Immutability)



في البرمجة الوظيفية، من المعتاد عدم تغيير البيانات الموجودة، بل إنشاء بيانات جديدة. في PHP، يمكن استخدام كائنات غير قابلة للتغيير أو ببساطة إرجاع مصفوفات جديدة.



<?php// سيء: تغيير المصفوفة الأصلية$numbers = [1, 2, 3];array_push($numbers, 4); // تحوير

// جيد: إنشاء مصفوفة جديدة$numbers = [1, 2, 3];$newNumbers = array_merge($numbers, [4]);

// دالة تعيد مصفوفة جديدةfunction addItem(array $arr, $item): array { $result = $arr; $result[] = $item; return $result;}

$original = [1, 2];$updated = addItem($original, 3);print_r($original); // [1, 2] — الأصل لم يتغيرprint_r($updated); // [1, 2, 3]?>


3. دوال الترتيب الأعلى: array_map, array_filter, array_reduce



دوال الترتيب الأعلى هي دوال تقبل دوال أخرى كوسائط أو تعيدها. في PHP، هناك ثلاث دوال مدمجة رئيسية للعمل مع المصفوفات بأسلوب وظيفي.



array_map — تحويل العناصر



<?php$users = [    ['name' => 'Alice', 'age' => 25],    ['name' => 'Bob', 'age' => 30],];

// استخراج الأسماء فقط$names = array_map(function($user) { return $user['name'];}, $users);

print_r(

المدونات

توصيات الكتب