php 注册回调函数,PHP回调函数
在開發(fā)系統(tǒng)的過程中,有時(shí)候希望針對(duì)一個(gè)對(duì)象或者一個(gè)值執(zhí)行多個(gè)不相干的操作,那么此時(shí)運(yùn)用回調(diào)將是最好的方式,回調(diào)函數(shù)可以是匿名函數(shù)、非匿名函數(shù)以及靜態(tài)方法。
class Person{
public $name;
public $age;
function __construct($name, $age){
$this->name = $name;
$this->age = $age;
}
}
class ProcessHire{
private $callbacks;
// 注冊(cè)回調(diào)方法
function registerCallback($callback){
if (!is_callable($callback)){
throw new Exception("callback not callable");
}
$this->callbacks[] = $callback;
}
// 逐一執(zhí)行回調(diào)方法,并發(fā)參數(shù)傳入回調(diào)方法
function hire($person){
print "Hiring {$person->name}:
";
foreach ($this->callbacks as $callback){
call_user_func($callback, $person);
}
}
}
// 匿名函數(shù)作為回調(diào)函數(shù)
$fun=create_function('$person','print "importting ({$person->name})";');
$processor = new ProcessHire();
$processor->registerCallback($fun);
$processor->hire(new Person("LiFang", 20));
print "
";
$processor->hire(new Person("LiuMing", 23));執(zhí)行結(jié)果:
Hiring LiFang:
importting (LiFang)
Hiring LiuMIng:
importting (LiuMing)
// 非匿名函數(shù)作為回調(diào)函數(shù)
class Sign{
function signContract($person){
print "sign a contract with {$person->name}
";
}
}
$processor = new ProcessHire();
// 這里傳入的是數(shù)組,而且第一個(gè)是對(duì)象實(shí)例,第二個(gè)是函數(shù)名稱
$processor->registerCallback(array(new Sign(), "signContract"));
//$processor->registerCallback(array("Sign", "signContract")); 也可以這么寫,包括靜態(tài)方法
$processor->hire(new Person("LiFang", 20));
print "
";
$processor->hire(new Person("LiuMing", 23));執(zhí)行結(jié)果:
Hiring LiFang:
sign a contract with LiFang
Hiring LiuMIng:
sign a contract with LiuMing
// 靜態(tài)方法作為回調(diào)函數(shù)
class Check{
static function checkAge($maxAge){
$age = 0;
return function($person) use($maxAge, $age){
$age = $person->age;
print "check: $age
";
if ($age>$maxAge){
print "age is too hight: $age";
}
};
}
}
$processor = new ProcessHire();
$processor->registerCallback(Check::checkAge(40));
$processor->hire(new Person("LiFang", 20));
print "
";
$processor->hire(new Person("LiuMing", 43));執(zhí)行結(jié)果: ?Hiring LiFang: ???? check: 20 ?Hiring LiuMIng: ???? check: 43 ???? age is too hight: 43 當(dāng)讓,你可以根據(jù)需要同時(shí)注冊(cè)多個(gè)不相干的方法,這樣,系統(tǒng)就會(huì)調(diào)用多個(gè)方法來(lái)處理你傳入的對(duì)象了。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的php 注册回调函数,PHP回调函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 时间api源码,时间API(示
- 下一篇: app 注册防刷 php,手机验证码设计