PHP回調(diào)函數(shù)概念與用法實(shí)例分析
本文實(shí)例講述了PHP回調(diào)函數(shù)概念與用法。分享給大家供大家參考,具體如下:
一、回調(diào)函數(shù)的概念
先看一下C語言里的回調(diào)函數(shù):回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。
其他語言里的回調(diào)函數(shù)的概念與之相似,只不過各種語言里回調(diào)函數(shù)的實(shí)現(xiàn)機(jī)制不一樣,通俗的來說,回調(diào)函數(shù)是一個(gè)我們定義的函數(shù),但是不是我們直接來調(diào)用,而是通過另一個(gè)函數(shù)來調(diào)用,這個(gè)函數(shù)通過接收回調(diào)函數(shù)的名字和參數(shù)來實(shí)現(xiàn)對(duì)它的調(diào)用。
二、php中回調(diào)函數(shù)的實(shí)現(xiàn)
php提供了兩個(gè)內(nèi)置函數(shù)call_user_func()
和call_user_func_array()
提供對(duì)回調(diào)函數(shù)的支持。這兩個(gè)函數(shù)的區(qū)別是call_user_func_array是以數(shù)組的形式接收回調(diào)函數(shù)的參數(shù)的,看它的原型就知道了:mixed call_user_func_array ( callable $callback ,array$param_arr ),它只有兩個(gè)參數(shù)。而call_user_func($callback,參數(shù)1,參數(shù)2,…)的參數(shù)個(gè)數(shù)根據(jù)回調(diào)函數(shù)的參數(shù)來確定的。
如何實(shí)現(xiàn)對(duì)腳本中全局函數(shù)、類中未使用$this的非靜態(tài)方法、類中使用$this的非靜態(tài)方法(需要傳入對(duì)象)、類中靜態(tài)方法的回調(diào)呢,下面是測(cè)試通過的代碼。
<?php //普通函數(shù) function f1($arg1,$arg2) { echo __FUNCTION__.'exec,the args is:'.$arg1.' '.$arg2; echo "<br/>"; } //通過call_user_func調(diào)用函數(shù)f1 call_user_func('f1','han','wen'); //通過call_user_func_array調(diào)用函數(shù) call_user_func_array('f1',array('han','wen')); class A { public $name; function show($arg1) { echo 'the arg is:'.$arg1."<br/>"; echo 'my name is:'.$this->name; echo "<br/>"; } function show1($arg1,$arg2) { echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."<br/>"; } public static function show2($arg1,$arg2) { echo __METHOD__.' of class A exec, the args is:'.$arg1.' '.$arg2."<br/>"; } } //調(diào)用類中非靜態(tài)成員函數(shù),該成員函數(shù)中有$this調(diào)用了對(duì)象中的成員 $a = new A; $a->name = 'wen'; call_user_func_array(array($a,'show',),array('han!')); //調(diào)用類中非靜態(tài)成員函數(shù),沒有對(duì)象被創(chuàng)建,該成員函數(shù)中不能有$this call_user_func_array(array('A','show1',),array('han!','wen')); //調(diào)用類中靜態(tài)成員函數(shù) call_user_func_array(array('A','show2'),array('argument1','argument2'));
運(yùn)行結(jié)果:
f1exec,the args is:han wen f1exec,the args is:han wen the arg is:han! my name is:wen A::show1 exec,the args is:han! wen A::show2 of class A exec, the args is:argument1 argument2
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php常用函數(shù)與技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》及《php程序設(shè)計(jì)算法總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP將回調(diào)函數(shù)作用到給定數(shù)組單元的方法
- JS回調(diào)函數(shù)原理與用法詳解【附PHP回調(diào)函數(shù)】
- PHP回調(diào)函數(shù)簡單用法示例
- PHP回調(diào)函數(shù)及匿名函數(shù)概念與用法詳解
- PHP回調(diào)函數(shù)與匿名函數(shù)實(shí)例詳解
- PHP中call_user_func_array回調(diào)函數(shù)的用法示例
- PHP 使用MySQL管理Session的回調(diào)函數(shù)詳解
- PHP 的異常處理、錯(cuò)誤的拋出及回調(diào)函數(shù)等面向?qū)ο蟮腻e(cuò)誤處理方法
- php回調(diào)函數(shù)處理數(shù)組操作示例
相關(guān)文章
PHP封裝的微信公眾平臺(tái)接口開發(fā)操作類完整示例
這篇文章主要介紹了PHP封裝的微信公眾平臺(tái)接口開發(fā)操作類,結(jié)合完整實(shí)例形式分析了php微信開發(fā)所涉及的配置、驗(yàn)證、接收、響應(yīng)、文本、語音、圖片等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06淺析PHP substr,mb_substr以及mb_strcut的區(qū)別和用法
本篇文章是對(duì)PHP中的substr,mb_substr以及mb_strcut區(qū)別和用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Server.HTMLEncode讓代碼在頁面里顯示為源代碼
這篇文章為大家介紹的是把寫入數(shù)據(jù)庫的html源代碼以html源編碼的形式顯示在頁面里面,這個(gè)是asp中的函數(shù)2013-12-12php文件后綴不強(qiáng)制為.php的實(shí)操方法
在本篇文章里小編給大家整理的是一篇關(guān)于php文件后綴不強(qiáng)制為.php的實(shí)操方法,有需要的朋友們參考下。2019-09-09PHP面向接口編程 耦合設(shè)計(jì)模式 簡單范例
了解些面向?qū)ο蟮闹R(shí),自己寫了段代碼測(cè)試一下,歡迎高手指點(diǎn)2011-03-03