本文目錄一覽:
php回調函數是什麼樣子的?靠什麼原理運行?
回調函數就是那些自己寫的,但是不是自己來調,而是給別人來掉的函數。
就像下面的odd()和even()函數一樣。
?php
function odd($var)
{
return($var % 2 == 1);
}
function even($var)
{
return($var % 2 == 0);
}
$array1 = array(“a”=1, “b”=2, “c”=3, “d”=4, “e”=5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo “Odd :\n”;
print_r(array_filter($array1, “odd”));//這裡把array1的值依次傳入到odd這個函數裡面,這種方式就稱為回調
echo “Even:\n”;
print_r(array_filter($array2, “even”));
?
下面這個例子實現函數的回調
?
function fnCallBack($msg1, $msg2)
{
echo ‘msg1:’.$msg1;
echo ‘br/’;
echo ‘msg2:’.$msg2;
}
$fnName = ‘fnCallBack’;//函數名
$params = array(‘hello’, ‘world’);//將要傳入到函數裡面的參數
call_user_func_array($fnName, $params);
?
PHP中的回調函數是怎麼實現的?
第一種, 常規的php全局函數
function test($echo)
{
echo $echo, “\n”;
}
$param = array(“”);
call_user_func_array(test, $param);
call_user_func_array(“test”, $param);
輸出:
兩種調用方式都可以成功調用, 說明call_user_func_array調用常規php局函數時的第一個參數可以為函數本身,也可以為表示函數名的字符串。
第二種, 類的靜態方法
class TestC
{
static function test($echo)
{
echo $echo, “\n”;
}
}
$param = array(“”);
call_user_func_array(array(TestC, “test”), $param);
call_user_func_array(array(“TestC”, “test”), $param);
輸出:
這時傳第一個參數的時候傳了一個數據。數組的第一個元素可以為類本身,也可以為類名的一個字符串。第二個元素則是一個表示方法名的字符串。
第三種,對象的方法
class TestC
{
protected $_a = “hello word”;
function test($echo)
{
$this-_a = $echo;
}
function show()
{
echo $this-_a, “\n”;
}
}
$param = array(“”);
$obj = new TestC();
call_user_func_array(array($obj, “test”), $param);
$obj-show();
$obj-test(“WEB應用開發”);
$obj-show();
輸出:
WEB應用開發
這裡是調用一個對象的方法。從test方法中設置對象的_a成員,然後通過show方法將它顯示出來,以驗證call_user_func_array調用方法時可以正確等到$this指針。這裡輸出的結果表明已經上面的方法是奏效的。其實回調對象的方法還有一種更加簡單的方法,直接$obj-{$method}()就可以調用,只要{$method}是存在的。
PHP回調函數及匿名函數概念與用法詳解
PHP的回調函數其實和C,Java等語言的回調函數的作用是一模一樣的,都是在主線程執行的過程中,突然跳去執行設置的回調函數;
回調函數執行完畢之後,再回到主線程處理接下來的流程;
而在PHP調用回調函數,不像C以及Java那樣直接使用函數名作為函數參數,而是在PHP中使用函數對應的字符串名稱執行。
// call_user_func — 把第一個參數作為回調函數調用
// 第一個參數 callback 是被調用的回調函數,其餘參數是回調函數的參數。
// PHP中的匿名函數,也叫閉包函數,允許指定一個沒有名稱的函數。最常用的就是回調函數的參數值。
//檢測一個函數變量是否是一個閉包
// 傳入參數,引用局部變量
PHP中的回調函數是怎麼實現的?
第一種,
常規的php全局函數
function
test($echo)
{
echo
$echo,
“\n”;
}
$param
=
array(“”);
call_user_func_array(test,
$param);
call_user_func_array(“test”,
$param);
輸出:
兩種調用方式都可以成功調用,
說明call_user_func_array調用常規php局函數時的第一個參數可以為函數本身,也可以為表示函數名的字符串。
第二種,
類的靜態方法
class
TestC
{
static
function
test($echo)
{
echo
$echo,
“\n”;
}
}
$param
=
array(“”);
call_user_func_array(array(TestC,
“test”),
$param);
call_user_func_array(array(“TestC”,
“test”),
$param);
輸出:
這時傳第一個參數的時候傳了一個數據。數組的第一個元素可以為類本身,也可以為類名的一個字符串。第二個元素則是一個表示方法名的字符串。
第三種,對象的方法
class
TestC
{
protected
$_a
=
“hello
word”;
function
test($echo)
{
$this-_a
=
$echo;
}
function
show()
{
echo
$this-_a,
“\n”;
}
}
$param
=
array(“”);
$obj
=
new
TestC();
call_user_func_array(array($obj,
“test”),
$param);
$obj-show();
$obj-test(“WEB應用開發”);
$obj-show();
輸出:
WEB應用開發
這裡是調用一個對象的方法。從test方法中設置對象的_a成員,然後通過show方法將它顯示出來,以驗證call_user_func_array調用方法時可以正確等到$this指針。這裡輸出的結果表明已經上面的方法是奏效的。其實回調對象的方法還有一種更加簡單的方法,直接$obj-{$method}()就可以調用,只要{$method}是存在的。
原創文章,作者:GZPN5,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128386.html