php中怎么使用call_user_func动态调用方法

php中可使用call_user_func进行方法的动态调用,可以动态调用普通函数、类方法以及带参数的类方法
1.定义一个普通函数getCurrentDate,用于获取今天日期。
call_user_func带上的参数为要被调用的函数名
fucntion getCurrentDate(){
echo ‘getCurrentDate:‘ . date(‘Y-m-d‘);
}
call_user_func(‘getCurrentDate‘);

程序会自动执行getCurrentDate函数并获得期望的结果
getCurrentDate:2016-04-13

2.定义一个类Cls53及类方法getTitle,call_user_func的输入参数变为一个数组,数组第一个元素为对象名、第二个元素为类方法名。
class Cls53{
public function getTitle(){
echo ‘title‘;
}
}

$cls = new Cls53();
call_user_func(array($cls,‘getTitle‘));

程序会自动调用对象cls的方法getTitle并获得期望的结果
title

3.也可调用带参数的方法,此时将getTitle方法改为getTitle($title).
调用时,加上第二个参数,就是需要传给方法的参数
class Cls53{
public function getTitle($title){
echo $title;
}
}

$cls = new Cls53();
call_user_func(array($cls,‘getTitle‘),‘abc‘);

传入的参数是abc,可获得期望的结果:
abc

原文地址:https://www.cnblogs.com/jjxhp/p/9379018.html

时间: 2024-10-07 17:18:45

php中怎么使用call_user_func动态调用方法的相关文章

使用反射构造对象实例并动态调用方法

在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例. MSDN解释如下: 反射提供了封装程序集.模块和类型的对象(Type 类型).可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性.如果代码中使用了属性,可以利用反射对它们进行访问. 主要用途: 动态加载DLL,实现插件机制. 实例化DLL中的类型. 执行后期

Struts2 动态调用方法

struts2动态调用方法有两种方式 方式一:用通配符进行调用: Action方法: 1 package com.bjyinfu.struts.actions; 2 3 public class CatchDynamicMethod { 4 5 public String doFirst(){ 6 System.out.println("执行doFirst方法"); 7 return "success"; 8 } 9 10 public String doSecon

自学ios开发-------Objective-c动态调用方法笔记

OC动态调用OC的函数调用是消息发送模式,即在运行时动态调用函数,OC在编译期可以调用任何函数,只要声明过这个函数,就不会报错,在真正运行的时候才会根据函数的名称找到对应的函数来调用[ASPerson SayHello] 编译时RunTime会将上述代码转化为objc_msgSend(ASPerson @selector(SayHello)) 所有定义的类型都继承自NSObject,NSObject中存在一个指向Class的指针 Class是指向objc_class结构的函数指针; struct

.Net——动态调用方法

一,使用InvokeMember 思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数. 示例(对普通方法和对静态方法的调用): #region 动态调用方法--使用InvokeMember对一般方法的调用 //Type t = typeof(Calculator); //Calculator c = new Calculator(1, 2); //int resul

struts2 动态调用方法和使用通配符定义

struts2中无需配置就可以直接调用Action中非execute方法的方式,就是用struts2的动态方法调用.动态方法调用是在action 的名字中使用感叹号(!)来标示要调用的方法名,其语法格式为actionName!methodname.action,例如我们的 struts.xml的配置如下: <struts> <package name="struts" namespace="/user" extends="struts-d

通过反射调用动态调用方法

调用无返回值.无参数的方法 假如有一个BaseEntity类,我们要使用反射调用BaseEntity类中的A方法:首先我们必须要先声明一个Type类的实例: Type baseType=typeof(BaseEntity); 再来我们要再声明一个MethodInfo类的实例,用来寻找BaseEntity类中的方法:现在我们要调用BaseEntity类中的A方法,所以我们代码可以这样写 MethodInfo MeInfo=baseType.GetMethod("A"); 然后我们就可以使

Java中通过method对象来调用方法

1 package reflectTest; 2 3 import java.lang.reflect.Method; 4 5 /** 6 * 通过获取类类型,进而获取Method对象,进而调用类的方法, 7 * 和直接通过类的对象来调用方法可以达到一样的效果,这里的示例调用了对象的三个方法 8 * @author Wang 9 * 10 */ 11 public class MethodDemo1 { 12 public static void main(String[] args) { 13

Struts2中Action的动态调用方法

在Struts2中,Action执行的时候并不一定要执行execute,我们可以指定Action执行哪个方法,下面分别介绍三种方法来指定Action执行哪个方法: 1.第一种方法,通过Action里的method属性指定执行方法,我们可以在struts.xml配置文件中配置Action的时候用method="   " 来指定执行的哪个方法. (1).接下来附上一个例子,通过第一种方法来指定执行方法,首先,复制一个已经搭建好struts2环境的web项目,这里我们复制ActionTest

Action的动态调用方法

Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法: 1. 方法一(通过methed属性指定执行方法): 可以在配置文件中配置Action的时候用method=来指定执行哪个方法 <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add"> <result>/user_ad