php學習bug總結

1.瀏覽器提示:

Fatal error: Class '\core\lib\drive\log\file' 
not found in /Library/WebServer/Documents/imooc/core/lib/log.php on line 22

仔細檢查這個文件缺失存在,然后查看調用創建類的地方代碼,
并打印

$class = '\core\lib\drive\log\\'.$drive;p($class);

self::$class = new $class;

創建類的時候,
也$class打印 \core\lib\drive\log\file
路徑也是對的.但是就是調試不出來.
仔細檢查發現 file文件的命名空間寫成了\core\lib\log
修改成\core\lib\drive\log就沒有問題了

這里為什么可以使用命名空間的方法來new 一個類呢? 難道不需要判斷有沒有這個文件或者有沒有導入么? 看第二個TIPS;

2.這里學習一個常識吧,在php類中new 一個類
第一,需要導入這個文件,這里可以使用spl_autoload_register指定一個調用方法.自動load一個類.

spl_autoload_register('\core\imooc::load');

這段代碼表示當new一個類的時候,會自動導入這個類.具體代碼如下:將命名空間的\替換成路徑的/寫法.去導入文件路徑.

static public function load($class){
        //自動加載類庫
        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 "沒有找到文件";
                return false;
            }

        }
        p('load ok');

 }

第二:所以當new 一個類的時候按照命名空間寫法,會自動觸發spl_autoload_register這個指定的加載方法.
可以這樣寫

$route = new \core\lib\route;

也可以這樣寫:

$route = new \core\lib\route();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容