البرمجة الوظيفية في PHP: الأساسيات والأمثلة

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

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

ابدأ الدورة

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



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



1. الأساسيات: الدوال المجهولة والإغلاقات



الدوال المجهولة (lambdas) هي حجر الزاوية للبرمجة الوظيفية في PHP. إنها تسمح بتمرير السلوك كبيانات.



<?php// Simple anonymous function$greet = function($name) {    return "Hello, $name!";};echo $greet('World'); // Hello, World!

// Usage with array_map$numbers = [1, 2, 3, 4, 5];$squared = array_map(function($n) { return $n * $n;}, $numbers);print_r($squared); // [1, 4, 9, 16, 25]?>


الإغلاقات هي دوال مجهولة تلتقط المتغيرات من النطاق الخارجي باستخدام الكلمة المفتاحية use:



<?php$factor = 3;$multiply = function($n) use ($factor) {    return $n * $factor;};echo $multiply(5); // 15

// Closure with a mutable variable (by reference)$counter = 0;$increment = function() use (&$counter) { $counter++;};$increment();echo $counter; // 1?>


الإغلاقات لا غنى عنها عند إنشاء دوال الاستدعاء والمصانع.



2. الدوال عالية المستوى: array_map، array_filter، array_reduce



تحتوي PHP على دوال عالية المستوى تقليدية مدمجة تقبل دوال أخرى كوسائط:



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


<?php$data = [1, 2, 3, 4, 5, 6];

// Filtering even numbers$even = array_filter($data, function($n) { return $n % 2 === 0;}); // [2, 4, 6]

// Doubling each element$doubled = array_map(function($n) { return $n * 2;}, $even); // [4, 8, 12]

// Sum of all values$sum = array_reduce($doubled, function($carry, $n) { return $carry + $n;}, 0); // 24?>


ملاحظة: array_filter يحافظ على المفاتيح. إذا كنت بحاجة إلى إعادة الفهرسة، استخدم array_values().



3. الثبات والعمل مع البيانات



تشجع البرمجة الوظيفية على الثبات — البيانات التي لا يمكن تغييرها. بدلاً من تعديل الكائنات الموجودة، يتم إنشاء كائنات جديدة.



<?php// Imperative approach (mutation)$user = ['name' => 'Ivan', 'age' => 25];$user['age'] = 26; // modifies the original array

// Functional approach (immutable)$user = ['name' => 'Ivan', 'age' => 25];$updatedUser = array_merge($user, ['age' => 26]); // new array?>


للعمل مع المصفوفات، استخدم array_merge، array_slice، و عامل الانتشار (PHP 7.4+):



<?php$original = [1, 2, 3];$new = [...$original, 4]; // [1, 2, 3, 4] — original remains unchanged?>


الثبات يبسط تصحيح الأخطاء ويجعل الكود آمنًا للخيوط.



4. الكيرينغ والتطبيق الجزئي



الكيرينغ هو تحويل دالة ذات وسائط متعددة إلى سلسلة من الدوال ذات وسيطة واحدة. التطبيق الجزئي هو تثبيت بعض الوسائط.



PHP لا تحتوي على كيرينغ مدمج، لكن من السهل تنفيذه:



<?php// Curried addition functionfunction curryAdd($a) {    return function($b) use ($a) {        return function($c) use ($a, $b) {            return $a + $b + $c;        };    };}

$add5 = curryAdd(5);

المدونات

توصيات الكتب