نعرف جيداً ما هي الدوال ( PHP FUNCTIONS ) وماهي الصيغة التي يتم تعريف الدوال بها وكيفية استخدامها, لكن لكل قاعدة شواذ. لذلك هناك نوع من الدوال يختلف قليلاً عن الدوال المعروفة وهو الدوال المجهولة ( PHP ANONYMOUS FUNCTIONS ).
كما نعلم أنه يتم تعريف الدالة العادية كالتالي
<?php function myFunctionName() { // (كتابة الكود هنا) } ?>حيث يتم تعريف الدالة باسم (myFunctionName) ومن ثم يمكن استدعاء الدالة بكتابة اسمها هكذا
myFunctionName();وتشبه الدالة المجهولة الدالة العادية من حيث أنها تحتوي على كود قابل للتنفيذ عند استدعاء الدالة ويمكنها استرجاع القيم ( PHP RETURNING VALUES ) وتقبل أيضاً الوسائط. راجع الدوال ( PHP FUNCTIONS ).
لكن يتضح الفارق من اسمها فهي دالة مجهولة أي ليس لها اسم . لاحظ الكود التالي
<?php function( $name, $timeOfDay ) { return ( "Good $timeOfDay, $name!" ); }; ?>لابد أنك لاحظت أن هناك اختلافين جذريان بين الدالة المجهولة والعادية وهما :
1- لا يوجد اسم للدالة بين الكلمة function والأقواس Parenthesis
2- هناك فاصلة منقوطة Semicolon (;) بعد تعريف الدالة . سطر رقم 4
وذلك لأن الدالة المجهولة في حد ذاتها هي تعبير Expression مثلها مثل المتغيرات والمصفوفات. والتعبيرات هي كل ما له قيمة.
لكن إذا كانت الدالة المجهولة ليس لها اسم كيف يمكن استدعاءها!!!!
كما قلنا أن الدالة المجهولة هي تعبير أي شيئ له قيمة لذلك يمكن :
تخصيصها لمتغير ( PHP VARIABLE ) ثم استدعاءها بمجرد كتابة اسم المتغير يمكن اضافة أي عدد منها داخل مصفوفة ( PHP ARRAY ) يمكن تمريرها لدالة أخري لحين استخدامها لاحقاً. تسمي في هذه الحالة دالة استدعاء ( PHP CALLBACK FUNCTION ) تخصيص الدالة مجهولة Anonymous لمتغير Variableأنظر الكود التالي
<?php // Assign an anonymous function to a variable $makeGreeting = function( $name, $timeOfDay ) { return ( "Good $timeOfDay, $name!" ); }; ?>في السطر رقم 2 قمنا بتعريف متغير makeGreeting$ ثم خصصنا دالة مجهولة معرفة بوسيطين Arguments هما name$ و timeOFDay$ .
تقوم هذه الدالة بطباعة جملة باستدخدام الوسائط الممررة للدالة . ويمكن استخدام الدالة كالآتي
// Call the anonymous function echo $makeGreeting( "Fred", "morning" ) . "<br>"; echo $makeGreeting( "Mary", "afternoon" ) . "<br>";فتكون النتيجة
Good morning, Fred!
Good afternoon, Mary!
أيضاً يمكن اضافة أكتر من دالة مجهولة داخل مصفوفة بهذا الشكل
<?php // Store 3 anonymous functions in an array $luckyDip = array( function() { echo "You got a bag of toffees!"; }, function() { echo "You got a toy car!"; }, function() { echo "You got some balloons!"; } ); ?>الآن لاستخدام أي دالة منهم يمكن استدعاءها باستخدام اسلوب الفهرسة للمصفوفات Array Indexing بهذا الشكل
$luckyDip[0]();تكون النتيجة هي
You got a bag of toffees!
[highlight background=”” color=””]تسمى عملية تخصيص الدوال المجهولة إلى متغير بـلامدا PHP Lambdas[/highlight]
يمكن استخدام الدوال المجهولة أيضاً فيما يسمى بدوال الإغلاق ( PHP Closures )