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