تابع برگشتي به تابعي گويند كه نام تابع بعنوان آرگومان تابع ديگر قرارگيرد .تابع برگشتي نميتواند آرگومان تابع خودش باشد.
هر تابع موجود را ميتوان بعنوان تابع برگشتي استفاده كرد .بدين صورت كه نام تابع در داخل كوتيش يا دبل كوتيشن بعنوان آرگومان تابع ديگراستفاده گردد.
مثال ـ در مثال زير تابعmy_callback() يك عبارت را دريافت كرده وطول آن عبارت را برگشت ميدهد. اين تابع بعنوان تابع برگشتي در تابعarray_map( ) بعنوان آرگومان اول استفاده شده است .تابعarray_map( ) يكي از توابع پيش بيني شده درphp است كه ميتواند از توابع برگشتي استفاده نمايد .در اين مثال تابع فوق مقدار عناصر آرايه$strings را به تابع برگشتي my_callback() ارسال نموده وطول آنرا دريافت كرده ودرآرايه$lenghts قرار ميدهد.
<?php function my_callback($item) {echo $item."<br>"; return strlen($item); } $strings = ["apple", "orange", "banana", "coconut"]; $lengths = array_map("my_callback", $strings); print_r($lengths); ?>
در نسخهPHP_7 شروع شده كه يك تابع ناشناخته ميتواندبعنوان تابع برگشتي استفاده شود .تابع ناشتاخته آنست كه هم جزو توابعphp نبوده وهم بعنوان تابع تعريف نشده است .تابع مذكور در همان پارامتر تابع سرويس گيرنده، تعريف خواهد شد.
مثال ـ همان مثال قبلي با تابع ناشناخته كه در پارامتر تابع سرويس گيرنده array_map( )بدون نام معرفي ميشود .
<?php $strings = ["apple", "orange", "banana", "coconut"]; $lengths = array_map( function($item) { return strlen($item); } , $strings); print_r($lengths); ?>
دراينجا با ذكر مثال قصد ايجاد نمونه اي از تابع سرويس گيرنده وتابع برگشتي را داريم .در مثال زير تابع تعريف شدهprintformated( )تابع سرويس گيرنده تابع برگشتي است .اين تابع از دو تابع بازگشتيexclaim( ) , ask( ) بصورت مجزا استفاده مي نمايد . اين توابع در پارامتر دوم تابع سرويس گيرنده ، ظاهر ميشوند.
<?php function exclaim($str) { return $str . "! "; } function ask($str) { return $str . "? "; } function printFormatted($str, $format) { // Calling the $format callback function echo $format($str); } // Pass "exclaim" and "ask" as callback functions to printFormatted() printFormatted("Hello world", "exclaim"); printFormatted("Hello world", "ask"); ?>