Tencent / Biny

Biny is a tiny, high-performance PHP framework for web applications

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在同一个方法中调用两个不同的$model 时, 后面的那个无法正常调用

3DMXM opened this issue · comments

我创建了两个 model,一个 redis 缓存相关, 一个 user 用户相关。
经过测试,如果只单独使用其中一个,没有问题,但如果两个混合使用,后面的那个model无法正常定位到方法。
如果把前面的 $data = App::$model->redis->GetWikiDataForPath($path); 注释掉,
后面的 $user_id = App::$model->user->GetUserId(); 就能正常获取到用户id了,
但如果前面的存在,后面的就会报错找不到 GetUserId 方法,原因是因为它去 redis 里面找的 。
将两个方法反过来, 如果先用 App::$model->user 之后,再调用 App::$model->redis ,它则会去 user 里面去找 redis 的方法,

image

image

不应该有这个问题 lib\models\Models.php 这个文件有改过吗?
可以分别把 App::$model->redis 和 App::$model->user 两个对象打印出来看看

我好像知道了 你的redis model对象 和 user model对象是不是用了同一个单例对象维护的?
当你第二个model获取的时候 因为有单例对象 所以就直接返回了上一个对象

App::$model->redis 本质是 返回了 app\model\redis::init()
App::$model->user 本质是 返回了 app\model\user::init()
你看看是不是有用同一个单例类做了处理导致的

原来还要写 init() 的。。。
我压根就没写 init 和 __construct 函数,
看了一眼 默认的 person.php , 加上 init 和 __construct 函数之后问题解决了,感谢

嗯 优先init() 其次 __construct 都不写的话 就走到了基类的__construct 大概就是这个原因导致的
init() 的作用就是可以实现获取对应的model对象 例如 $user = App::$model->user($userid) 这样