PHP自動(dòng)加載報(bào)錯(cuò)找不到原因,求大佬幫忙看看
問(wèn)題描述
<?phpnamespace frameworkcore;class Framework{ //在構(gòu)造方法中初始化 public function __construct() {$this->autoload();$this->initMCA();$this->dispatch(); } //注冊(cè)自動(dòng)加載 public function autoload() {//說(shuō)明:如果一個(gè)函數(shù)的參數(shù)是回調(diào)函數(shù),就直接寫(xiě)函數(shù)的名字//如果函數(shù)的參數(shù)是一個(gè)對(duì)象的方法的話(huà),需要傳遞數(shù)組進(jìn)去,參數(shù)1:對(duì)象;參數(shù)2:對(duì)象的方法spl_autoload_register(array($this,"autoloader")); } //自動(dòng)加載執(zhí)行的函數(shù) public function autoloader($className) {echo '我們需要:'.$className.'<br>';//針對(duì)第三方的類(lèi),做一個(gè)特例處理if($className=='Smarty'){ require_once './framework/vendor/smarty/Smarty.class.php'; return;}//1. 先將帶有命名空間的類(lèi),分隔開(kāi)$arr = explode('', $className); //2. 根據(jù)第一個(gè)元素確定加載的根目錄if($arr[0] == 'framework'){ $basic_path = './';}else{ $basic_path = './application/';}//3. 確定application、framwork里面的子目錄$sub_path = str_replace('', '/', $className); //4. 確定文件名//確定后綴:類(lèi)文件的后綴:.class.php,接口文件的后綴是:.interface.php//frameworkdaoI_DAO,判斷最后元素是否是I_開(kāi)頭if(substr($arr[count($arr)-1], 0,2)=='I_'){ //說(shuō)明是接口文件 $fix = '.interface.php';}else{ $fix = '.class.php';}$class_file = $basic_path.$sub_path.$fix; //5. 加載類(lèi)//如果不是按照我們的命名空間的規(guī)則定義的,說(shuō)明不是我們需要加載的類(lèi),不用加載if(file_exists($class_file)){ require_once $class_file;} } //確定mca public function initMCA() {//前臺(tái)還是后臺(tái)?$m = isset($_GET['m'])?$_GET['m']:'home';define('MODULE', $m);//訪問(wèn)哪個(gè)控制器$c = isset($_GET['c'])?$_GET['c']:'Index';define('CONTROLLER', $c);//訪問(wèn)控制器的哪個(gè)操作$a = isset($_GET['a'])?$_GET['a']:'indexAction';define('ACTION', $a); }//實(shí)例化對(duì)象,調(diào)用方法 public function dispatch() {$controller_name = MODULE.'controller'.CONTROLLER.'Controller';//先加載控制器類(lèi),再實(shí)例化對(duì)象$controller = new $controller_name;//調(diào)用控制器的方法$a = ACTION;$controller -> $a(); }}
問(wèn)題解答
回答1:你把smarty重新下載看看,先看看你項(xiàng)目中的smart中是否有sysplugins文件夾和plugins文件夾沒(méi)有就考進(jìn)去。
