久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

PHP Callback / Callable

2023-09-15 249

在PHP中,回調(Callback)可以通過 callable 類型聲明來表示。一些函數(shù)如 call_user_func() 或 usort() 可以接受用戶自定義的回調函數(shù)作為參數(shù)。回調函數(shù)不止可以是簡單函數(shù),還可以是對象的方法,包括靜態(tài)類方法。

傳遞

  • PHP是將函數(shù)以string形式傳遞的。 可以使用任何內置或用戶自定義函數(shù),但除了語言結構例如:array(),echo,empty(),eval(),exit(),isset(),list(),print 或 unset()。
  • 一個已實例化的 object 的方法被作為 array 傳遞,下標 0 包含該 object,下標 1 包含方法名。 在同一個類里可以訪問 protected 和 private 方法。
  • 靜態(tài)類方法可以不實例化 object 傳遞,只需要在下標為 0 的位置傳遞類名而不是 object ,或者傳遞 ‘ClassName::methodName’。
  • 回調參數(shù)不僅可以使用普通的用戶自定義函數(shù),也接受 匿名函數(shù) 和 箭頭函數(shù)。

注意:從 PHP 8.1.0 開始,還可以使用 First-class 可調用語法 創(chuàng)建匿名函數(shù)。

通常情況下,任何實現(xiàn)了 __invoke() 的對象都可以傳入回調參數(shù)。

示例:回調函數(shù)示例

<?php 
// 回調函數(shù)示范
function my_callback_function() {
echo 'hello world!';
}

// 回調方法示范
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}

// 類型 1:簡單的回調
call_user_func('my_callback_function'); 

// 類型 2:靜態(tài)類方法回調
call_user_func(array('MyClass', 'myCallbackMethod')); 

// 類型 3:對象方法回調
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// 類型 4:靜態(tài)類方法回調
call_user_func('MyClass::myCallbackMethod');

// 類型 5:父級靜態(tài)類回調
class A {
public static function who() {
echo "A\n";
}
}

class B extends A {
public static function who() {
echo "B\n";
}
}

call_user_func(array('B', 'parent::who')); // A,從 PHP 8.2.0 起棄用。

// 類型 6:實現(xiàn) __invoke 的對象用于回調
class C {
public function __invoke($name) {
echo 'Hello ', $name, "\n";
}
}

$c = new C();
call_user_func($c, 'PHP!');
?>

示例 :使用 Closure 的示例

<?php
// 閉包
$double = function($a) {
return $a * 2;
};

// 這是數(shù)字范圍
$numbers = range(1, 5);

// 這里使用閉包作為回調,

// 將范圍內的每個元素數(shù)值翻倍
$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);
?>

以上示例會輸出:

2 4 6 8 10

注意:在函數(shù)中注冊有多個回調內容時(如使用 call_user_func() 與 call_user_func_array()),如在前一個回調中有未捕獲的異常,其后的將不再被調用。

  • 廣告合作

  • QQ群號:4114653

溫馨提示:
1、本網站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內容未經允許不得轉裁,轉載請注明出處“站長百科”和原文地址。
PHP Callback / Callable
上一篇: PHP Object 對象