就本章講的內容而已,對兩個構造函數表示非常不解
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的面向對象完全不同。
2017-03-10
回答 3 web環境 尤其是nginx+fpm環境下 php程序被載入運行輸出后就結束了。每個用戶的請求都是在一個phpfpm的子進程里完成的。每個子進程每次只處理一個用戶的請求,處理完再處理下一個
2017-03-10
回答1 構造函數在類實例化之后立即執行。課程例子里在跳轉的同時用exit終止了 下面代碼的執行。所以不管c的第二個參數是神馬 都沒有執行的機會。
2017-03-10
回答2 面向對象里 我們寫的auth類作為一個對象來看 他的核心屬性 就是$auth? 而session里的auth僅僅是個值。在其他地方我們只管問$auth要結果好了。 而不關心他的值究竟來自哪里:沒準現在是session 下次就是cookie 或者api驗證 等等。
2017-03-05
最后一句“古怪的賦值方式”改成“古怪的構造邏輯”。