PHP中调用类方法需据方法类型选择方式:非静态方法通过对象实例用->调用;静态方法用::通过类名调用;反射机制可动态调用并绕过访问控制;call_user_func_array支持数组式回调调用;__call魔术方法可代理不存在的方法调用。

如果您在PHP中定义了一个类,并希望执行其中的某个方法,则需要通过对象实例或类名来调用该方法。以下是调用PHP类方法的具体步骤:
一、通过对象实例调用非静态方法
非静态方法必须依赖于类的实例才能运行,因为它们可能访问实例属性或使用$this关键字。因此需先创建对象,再通过对象调用方法。
1、使用new关键字创建类的实例,例如:$obj = new MyClass();
2、使用对象操作符->后接方法名,例如:$obj->methodName();
立即学习“PHP免费学习笔记(深入)”;
3、若方法需要参数,在括号中传入对应类型的值,例如:$obj->calculate(10, 5);
4、若方法有返回值,可用变量接收,例如:$result = $obj->getData();
二、通过类名调用静态方法
静态方法属于类本身而非某个具体对象,不依赖$this,可直接通过类名访问,适用于工具函数或无需实例状态的操作。
1、确保方法在类中声明为static,例如:public static function helper() { ... }
2、使用作用域解析操作符::连接类名与方法名,例如:MyClass::helper();
3、若静态方法位于当前类内部,可用self::helper()或static::helper()调用
4、调用父类静态方法时,使用parent::methodName(),注意不可使用$this->调用静态方法
三、通过反射机制动态调用方法
反射允许在运行时检查类结构并调用方法,适用于框架开发或需根据字符串名称触发方法的场景。
1、创建ReflectionClass实例,传入类名,例如:$ref = new ReflectionClass('MyClass');
2、使用getmethod()获取指定方法的ReflectionMethod对象,例如:$method = $ref->getMethod('process');
3、调用setAccessible(true)以绕过访问控制(如private/protected方法)
4、使用invoke()或invokeArgs()执行方法,例如:$method->invoke($obj, 'param1', 'param2');
四、使用call_user_func_array调用方法
该函数支持将方法名与参数数组组合调用,常用于回调处理或方法名由变量决定的情形。
1、构造调用目标数组:对于对象方法为[$obj, 'methodName'],对于静态方法为['ClassName', 'methodName']
2、准备参数数组,例如:$params = [1, 'test', true];
3、调用call_user_func_array(),例如:$result = call_user_func_array([$obj, 'save'], $params);
4、注意:若目标方法为private或protected,此方式默认无法调用,需配合反射设置可访问性
五、通过魔术方法__call实现方法代理
当调用一个不存在的实例方法时,PHP会自动触发__call魔术方法,可用于统一拦截、日志记录或动态转发。
1、在类中定义public function __call($name, $arguments) { ... }
2、在方法体内判断$name是否匹配预设规则,例如:if (strpos($name, 'get') === 0) { ... }
3、使用array_unshift()向$arguments前插入对象自身或其他上下文参数
4、通过call_user_func_array()转发至真实方法,此时可实现统一权限校验或参数预处理









