为了账号安全,请及时绑定邮箱和手机立即绑定

就本章讲的内容而已,对两个构造函数表示非常不解

1、不明白为什么要在adminController的构造函数里进行跳转

假设是第一次访问,从PC::run进入,紧接着在 C() 函数里就会执行 new adminController,这时候构造函数就会被执行,此时当然还没有登录,然后就会触发跳转到登录页,但同时 C() 函数的第二个参数是要执行的方法,这个参数带什么好呢?如果带 GET 方式的 login,等于又触发一次打开 login.html,如果带 POST 方式的 login,此时用户都还没输入用户名密码呢,到哪来 POST 参数;

2、不明白为什么要在 authModel 的构造函数里对 $this->auth 赋值

觉得很多余,因为第一次创建 authModel 对象时,$_SESSION['auth'] 肯定还没值,只有执行过authModel::loginsubmit()方法后,它才有值,假设在此之后如果别的地方又要用到 authModel 了,new 了第二个对象,此时 $_SESSION['auth'] 有值了,也完全没必要赋给 $this->auth呀,以后不管是需要获取 auth 也好,还是判断是否已登录,直接从 $_SESSION['auth'] 里拿值就好啊,把值赋给 $this->auth ,再从$this->auth拿值岂不是很多余?

3、接问题2,在我的猜测里,只有一种可能会需要对$this->auth赋值,那就是 $_SESSION['auth'] 的值会变时才有必要。也就是 A 用户登录,new一个 authModel,将 $_SESSION['auth'] 赋值给 $this->auth,然后 B 用户又登录,又 new 了一个authModel,然后再把新的 $_SESSION['auth'] 赋值给新的authModel对象的 $this->auth。

当然,我对 php 的多线程机制很不了解,听说php是不支持多线程的,只有多进程模式,不知道是不是这种原因导致的才需要这么古怪的赋值方式,感觉和 C++、JAVA的面向对象完全不同。

正在回答

4 回答

回答 3 web环境 尤其是nginx+fpm环境下 php程序被载入运行输出后就结束了。每个用户的请求都是在一个phpfpm的子进程里完成的。每个子进程每次只处理一个用户的请求,处理完再处理下一个

1 回复 有任何疑惑可以回复我~
#1

金泽城 提问者

非常感谢!
2017-03-11 回复 有任何疑惑可以回复我~
#2

金泽城 提问者

感谢老师细致耐心的回复!很抱歉在我提出这个问题前,对于php的运行机制还不甚了解,还在以C++固有的面向对象编程的设计思想去硬套,所以就得出了这些可笑的问题。感谢您的认真指点,让我进一步加深了理解,坚定了学习的步伐,非常感谢!
2017-03-11 回复 有任何疑惑可以回复我~
#3

PengCheng 回复 金泽城 提问者

感谢收听
2017-03-13 回复 有任何疑惑可以回复我~

回答1 构造函数在类实例化之后立即执行。课程例子里在跳转的同时用exit终止了 下面代码的执行。所以不管c的第二个参数是神马 都没有执行的机会。

2 回复 有任何疑惑可以回复我~

回答2 面向对象里 我们写的auth类作为一个对象来看 他的核心属性 就是$auth  而session里的auth仅仅是个值。在其他地方我们只管问$auth要结果好了。 而不关心他的值究竟来自哪里:没准现在是session 下次就是cookie 或者api验证 等等。

2 回复 有任何疑惑可以回复我~

最后一句“古怪的赋值方式”改成“古怪的构造逻辑”。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
MVC架构模式分析与设计
  • 参与学习       82400    人
  • 解答问题       929    个

通过学习MVC理论知识,由浅入深带您实现人生第一个MVC框架

进入课程

就本章讲的内容而已,对两个构造函数表示非常不解

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信