call_user_func_array 调用不到父类的方法

asklogic extends baselogic
asklogic 有个属性 static::$model
是个askmodel对象
askmodel extends basemodel
但是static::$model调用不了 basemodel里的方法

还有。。使用这种方法在__call里调用的
$data = call_user_func_array([static::$model, $method], $arguments);

求解
语言php
框架tp

阅读 5.2k
3 个回答

谢邀
我很久木有用TP了 对TP不熟 我帮你邀请了我的一个朋友@白俊遥 他对TP很熟 希望他能解决你的问题

public static $model是你自己定义的吧?$model并没有赋值当然不能调用了,通常是这样写的。

class A {
    protected static $model;
    public static function getModelInstance() {
        if (empty(static::$model)) static::$model = new YourClass();
        return static::$model;
    }
}
//call
echo A::getModelInstance()->method();

很凑巧,今天我也遇到这种问题了。排查问题后发现call_user_func_array([static::$model, $method], $arguments) 在这种写法里,当$method=__METHOD__时,而且是调用的父类方法,确实调用不到

因为__METHOD__是方法名全路径,即精确到子类命名空间,如:subclass_namespaceSubClass::methodName 。这种方式在不存在继承关系时,call_user_func_array没有问题

解决办法:$method只写方法名即可: $method =__FUNCTION__

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题