您的位置:首页技术文章
文章详情页

PHP自动加载报错找不到原因,求大佬帮忙看看

【字号: 日期:2022-06-06 10:06:20浏览:81作者:猪猪

问题描述

PHP自动加载报错找不到原因,求大佬帮忙看看<?phpnamespace frameworkcore;class Framework{ //在构造方法中初始化 public function __construct() {$this->autoload();$this->initMCA();$this->dispatch(); } //注册自动加载 public function autoload() {//说明:如果一个函数的参数是回调函数,就直接写函数的名字//如果函数的参数是一个对象的方法的话,需要传递数组进去,参数1:对象;参数2:对象的方法spl_autoload_register(array($this,"autoloader")); } //自动加载执行的函数 public function autoloader($className) {echo '我们需要:'.$className.'<br>';//针对第三方的类,做一个特例处理if($className=='Smarty'){ require_once './framework/vendor/smarty/Smarty.class.php'; return;}//1. 先将带有命名空间的类,分隔开$arr = explode('', $className); //2. 根据第一个元素确定加载的根目录if($arr[0] == 'framework'){ $basic_path = './';}else{ $basic_path = './application/';}//3. 确定application、framwork里面的子目录$sub_path = str_replace('', '/', $className); //4. 确定文件名//确定后缀:类文件的后缀:.class.php,接口文件的后缀是:.interface.php//frameworkdaoI_DAO,判断最后元素是否是I_开头if(substr($arr[count($arr)-1], 0,2)=='I_'){ //说明是接口文件 $fix = '.interface.php';}else{ $fix = '.class.php';}$class_file = $basic_path.$sub_path.$fix; //5. 加载类//如果不是按照我们的命名空间的规则定义的,说明不是我们需要加载的类,不用加载if(file_exists($class_file)){ require_once $class_file;} } //确定mca public function initMCA() {//前台还是后台?$m = isset($_GET['m'])?$_GET['m']:'home';define('MODULE', $m);//访问哪个控制器$c = isset($_GET['c'])?$_GET['c']:'Index';define('CONTROLLER', $c);//访问控制器的哪个操作$a = isset($_GET['a'])?$_GET['a']:'indexAction';define('ACTION', $a); }//实例化对象,调用方法 public function dispatch() {$controller_name = MODULE.'controller'.CONTROLLER.'Controller';//先加载控制器类,再实例化对象$controller = new $controller_name;//调用控制器的方法$a = ACTION;$controller -> $a(); }}

问题解答

回答1:

你把smarty重新下载看看,先看看你项目中的smart中是否有sysplugins文件夹和plugins文件夹没有就考进去。