‎‎توابع برگشتيPHP Callback Functions

Previous >    <Next  

‎‎توابع برگشتيCallback Functions -‎

‎تابع برگشتي به تابعي گويند كه نام تابع بعنوان آرگومان تابع ديگر قرارگيرد .تابع برگشتي ‎نميتواند آرگومان تابع خودش باشد.

‎هر تابع موجود را ميتوان بعنوان تابع برگشتي استفاده كرد .بدين صورت كه نام تابع در داخل ‎كوتيش يا دبل كوتيشن بعنوان آرگومان تابع ديگراستفاده گردد.

‎مثال ـ در مثال زير تابع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);
?> 

--(go to editor for change code and run)

‎در نسخهPHP_7 شروع شده كه يك تابع ناشناخته ميتواندبعنوان تابع برگشتي استفاده شود .تابع ‎ناشتاخته آنست كه هم جزو توابعphp نبوده وهم بعنوان تابع تعريف نشده است .تابع مذكور در همان ‎پارامتر تابع سرويس گيرنده، تعريف خواهد شد.

‎مثال ـ همان مثال قبلي با تابع ناشناخته كه در پارامتر تابع سرويس گيرنده ‎array_map( )‎‎بدون نام معرفي ميشود .

<?php 
$strings = ["apple", "orange", "banana", "coconut"];
$lengths = array_map( function($item) { return strlen($item); } , $strings);
print_r($lengths);
?> 

--(go to editor for change code and run)

‎‎تابع بازگشتي درتابع تعريف شده كاربري

‎Callbacks in User Defined Functions‎

‎دراينجا با ذكر مثال قصد ايجاد نمونه اي از تابع سرويس گيرنده وتابع برگشتي را داريم .در مثال ‎زير تابع تعريف شده‎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");
?> 

--(go to editor for change code and run)


Previous >    <Next