call_user_func_array 调用不到父类的方法

发布于 2022-09-02 23:46:57 字数 280 浏览 18 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尹雨沫 2022-09-09 23:46:57

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

女中豪杰 2022-09-09 23:46:57

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();
○闲身 2022-09-09 23:46:57

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文