php回调函数的概念及实例
php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持。
这两个函数的区别是call_user_func_array是以数组的形式接收回调函数的参数的,
看它的原型就知道了:mixed call_user_func_array ( callable $callback,array$param_arr ),它只有两个参数。
而call_user_func($callback,参数1,参数2,…)的参数个数根据回调函数的参数来确定的。
如何实现对脚本中全局函数、类中未使用$this的非静态方法、类中使用$this的非静态方法(需要传入对象)、类中静态方法的回调呢,下面是测试通过的代码。
<?php
//普通函数
function f1($arg1,$arg2)
{
echo __FUNCTION__.'exec,the args is:'.$arg1.' '.$arg2;
echo "<br/>";
}
//通过call_user_func调用函数f1
call_user_func('f1','han','wen');
//通过call_user_func_array调用函数
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/>";
}
}
//调用类中非静态成员函数,该成员函数中有$this调用了对象中的成员
$a = new A;
$a->name = 'wen';
call_user_func_array(array($a,'show',),array('han!'));
//调用类中非静态成员函数,没有对象被创建,该成员函数中不能有$this
call_user_func_array(array('A','show1',),array('han!','wen'));
//调用类中静态成员函数
call_user_func_array(array('A','show2'),array('argument1','argument2'));
原文:https://blog.csdn.net/u010544319/article/details/9186323
php回调函数的概念及实例的更多相关文章
- 【转】JS回调函数--简单易懂有实例
JS回调函数--简单易懂有实例 初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function that is ...
- JS回调函数--简单易懂有实例
版权声明:本文为博主原创文章,转载请注明出处 初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function t ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- JS回调函数(callback)
在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({ url:"test.json", type: "GET" ...
- Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!
开篇:要想理解Block和委托,最快的方法是搞明白“回调函数”这个概念. 做为初级选手,我们把Block.委托.回调函数,视为同一原理的三种不同名称.也就是说,现在,我们把这三个名词当成一回事.在这篇 ...
- 动态加载JS文件,并根据JS文件的加载状态来执行自己的回调函数
动态加载JS文件,并根据JS文件的加载状态来执行自己的回调函数, 在很多场景下,我们需要在动态加载JS文件的时候,根据加载的状态来进行后续的操作,需要在JS加载成功后,执行另一方法,这个方法是依托在加 ...
- node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了
最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...
- 理解javascript中的回调函数(callback)
以下内容来源于:http://www.jb51.net/article/54641.htm 最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs ...
- javascript中的回调函数(callback)
代码如下: app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; ...
随机推荐
- $(function() {....}) ,(function($){...})(jQuery)
$(function() {....}) 是 jQuery 中的经典用法,等同于 $(document).ready(function() {....}),即在页面加载完成后才执行某个函数,如果函数中 ...
- C++11 线程并发
并发 头文件<future> <thread> 高级接口 async().future<> future<int> result1; //int为fun ...
- Spring Boot Endpoint
Spring Boot 的 Endpoints 带着强烈的 DevOps 色彩, “you build it, you run it” ,开发不仅要关心如何实现功能,还需要关心服务在线上运行的状态,如 ...
- mysql连接报java.math.BigInteger cannot be cast to java.lang.Long异常
使用hibernate出现以下错误 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot b ...
- org.springframework.beans.factory.CannotLoadBeanClassException-估计mapper出参 和 po字段不对应了
DEBUG [localhost-startStop-1] - Ignoring bean class loading failure for bean 'itemsService'org.sprin ...
- java json 转换
1.直接输出: 2.字符串 通过eval转换输出,里面涉及到一个转义问题,还要注意eval的用法里面需要加"("+ + ")" 3.
- ASP.NET MVC - 多国语言的简单实现
定义一个类 public class Book { public int ID { get; set; } public string Title { get; set; } ...
- Javascript - Jquery - 筛选
筛选(JQuery Selector) JQuery是一个JavaScript库,它极大地简化了JavaScript编程.整个JQuery库的方法都在$这个工厂函数里,我们只需要使用$函数,而$函数会 ...
- ActiveMQ中Broker的应用与启动方式
Broker:英语有代理的意思,在activemq中,Broker就相当于一个Activemq实例. 1. 命令行启动实例: 1.activemq start使用默认的activemq.xml启动 E ...
- SpringBoot单元测试示例
⒈控制器Action示例 package cn.coreqi.controller; import org.junit.Test; import org.junit.runner.RunWith; i ...