第三步:Think類的實現之類的自動加載
上回講到調用Think類中的start函數,這個函數是一個靜態函數,因此,不需要初始化便能夠被調用。這次,就來分析一下這個start函數有什麼功能。
第一行代碼是:
spl_autoload_register('Think\Think::autoload');
這行代碼的功能是自動加載類功能。傳遞的是Think名字空間下的Think類中autoload這個函數。
默認呢的自動加載函數是_autoload,這個函數有一個參數,用來接送類名。
我們現在Think中的代碼是這樣子的:
未來演示自動加載類函數的功能,我們再在index.php中修改成這個樣子:
運行下,便會發現,網站輸出了abc這三個字,而這三個字,正是我們在index.php中所調用到的類名。因爲從運行到現在,還沒有加載過一個名爲abc的類,因此,當php檢測到沒有這個類,他就會autoload這個函數。而我們在autoload函數中,所要做的事情,無非就是檢測類文件在哪個地方,然後把這個類文件給include或者是require進來。
綜合下來,autoload這個函數大體就是這個模樣:
因爲在這個函數中需要使用到APP_PATH這個常量,本來,應該在我們的ThinkPHP.php這個文件中導如這個常量的,但是爲了讓用戶能夠自定義應用目錄名,這個就需要用戶自己定義了:
當然,爲了防止用戶忘記輸入錯誤,我們也應該在我們的ThinkPHP中,添加一行代碼內容,防止此類問題出現:
現在的ThinkPHP.php變成爲: