1.瀏覽器提示:
Fatal error: Class '\core\lib\drive\log\file'
not found in /Library/WebServer/Documents/imooc/core/lib/log.php on line 22
仔細(xì)檢查這個(gè)文件缺失存在,然后查看調(diào)用創(chuàng)建類的地方代碼,
并打印
$class = '\core\lib\drive\log\\'.$drive;p($class);
self::$class = new $class;
創(chuàng)建類的時(shí)候,
也$class打印 \core\lib\drive\log\file
路徑也是對(duì)的.但是就是調(diào)試不出來(lái).
仔細(xì)檢查發(fā)現(xiàn) file文件的命名空間寫(xiě)成了\core\lib\log
修改成\core\lib\drive\log
就沒(méi)有問(wèn)題了
這里為什么可以使用命名空間的方法來(lái)new 一個(gè)類呢? 難道不需要判斷有沒(méi)有這個(gè)文件或者有沒(méi)有導(dǎo)入么? 看第二個(gè)TIPS;
2.這里學(xué)習(xí)一個(gè)常識(shí)吧,在php類中new 一個(gè)類
第一,需要導(dǎo)入這個(gè)文件,這里可以使用spl_autoload_register
指定一個(gè)調(diào)用方法.自動(dòng)load一個(gè)類.
spl_autoload_register('\core\imooc::load');
這段代碼表示當(dāng)new一個(gè)類的時(shí)候,會(huì)自動(dòng)導(dǎo)入這個(gè)類.具體代碼如下:將命名空間的\替換成路徑的/寫(xiě)法.去導(dǎo)入文件路徑.
static public function load($class){
//自動(dòng)加載類庫(kù)
if(isset($classMap[$class])){
return true;
}else{
$class = str_replace('\\','/',$class);
$file = IMOOC.'/'.$class.'.php';
///Library/WebServer/Documents/imooc/core/route.php
if(is_file($file)){
include $file;
self::$classMap[$class] = $class;
}else{
//throw "沒(méi)有找到文件";
return false;
}
}
p('load ok');
}
第二:所以當(dāng)new 一個(gè)類的時(shí)候按照命名空間寫(xiě)法,會(huì)自動(dòng)觸發(fā)spl_autoload_register這個(gè)指定的加載方法.
可以這樣寫(xiě)
$route = new \core\lib\route;
也可以這樣寫(xiě):
$route = new \core\lib\route();