Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
3DMXM opened this issue Oct 24, 2022 · 5 comments

Comments

@3DMXM
Copy link

3DMXM commented Oct 24, 2022

我创建了两个 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

@billge1205
Copy link
Collaborator

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

@billge1205
Copy link
Collaborator

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

@billge1205
Copy link
Collaborator

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

@3DMXM
Copy link
Author

3DMXM commented Oct 24, 2022

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

@billge1205
Copy link
Collaborator

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants