金泽城
2017-03-05 21:33
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的面向对象完全不同。
回答 3 web环境 尤其是nginx+fpm环境下 php程序被载入运行输出后就结束了。每个用户的请求都是在一个phpfpm的子进程里完成的。每个子进程每次只处理一个用户的请求,处理完再处理下一个
回答1 构造函数在类实例化之后立即执行。课程例子里在跳转的同时用exit终止了 下面代码的执行。所以不管c的第二个参数是神马 都没有执行的机会。
回答2 面向对象里 我们写的auth类作为一个对象来看 他的核心属性 就是$auth 而session里的auth仅仅是个值。在其他地方我们只管问$auth要结果好了。 而不关心他的值究竟来自哪里:没准现在是session 下次就是cookie 或者api验证 等等。
最后一句“古怪的赋值方式”改成“古怪的构造逻辑”。
MVC架构模式分析与设计
82400 学习 · 929 问题
相似问题