PHP自动加载查找当前PHP文件

PHP自动加载查找当前PHP文件,php,codeigniter,Php,Codeigniter,文件:deckclass.php,DOCROOT设置为/var/www/Proj/application/controllers 获取错误:致命错误:在第38行的/var/www/Proj/application/controllers/deckclass.php中找不到类“Cardclass” 为什么搜索当前php文件而不是DOCROOT文件夹 function __autoload($class_name) { //class directories $filename = DOC

文件:deckclass.php,DOCROOT设置为/var/www/Proj/application/controllers

获取错误:致命错误:在第38行的/var/www/Proj/application/controllers/deckclass.php中找不到类“Cardclass”

为什么搜索当前php文件而不是DOCROOT文件夹

function __autoload($class_name) 
{
  //class directories
  $filename = DOCROOT .strtolower($class_name) . ".php";
  if ( file_exists($filename) )
  {
    require_once ($filename);
  }
  else {
    throw new Exception("Unable to load $class_name.");
  }
}

$card = new Cardclass();
您可以使用define'ROOT',dirname\u\u FILE\u;并定义'DS',目录分隔符

提示 spl_自动加载_寄存器为 自动加载类。因此,使用_自动加载是非常必要的 不鼓励,将来可能会被弃用或删除

那么代码应该是这样的:

     <?php
        define('DS', DIRECTORY_SEPARATOR);
        define('ROOT', dirname(__FILE__)); //This is full path
        spl_autoload_register('Autoloader'); //You can use annonymous function here
        function Autoloader($class_name){
          $filename = ROOT.DS.strtolower($class_name).".php";
          var_dump($filename);
          if(file_exists($filename)){
            require_once ($filename);
          }else{
            throw new Exception("Unable to load ".$class_name."in".$filename);
          }
        }

        $card = new Cardclass();
自动加载时:

<?php
        define('DS', DIRECTORY_SEPARATOR);
        define('ROOT', dirname(__FILE__)); //This is full path
        function __autoload($class_name){
          $filename = ROOT.DS.strtolower($class_name).".php";
          var_dump($filename);
          if(strpos($class, 'CI_') !== 0) {

             if(file_exists($filename)){
               require_once ($filename);
            }else{
               throw new Exception("Unable to load ".$class_name."in".$filename);
            }
          }
        }

        $card = new Cardclass();

您的控制器文件夹中是否有任何名为Cardclass的php文件?是的,它名为Cardclass.php,然后只需执行echo$filename;检查输出路径我删除了我的答案,因为它不是一个解决方案,我想出于某种原因,自动加载方法没有注册,否则您可以打印文件名,不幸的是,我不知道为什么。致命错误:在spl_autoload_寄存器'Autoloader'上未找到带有消息'Function'Autoloader'的未捕获异常'LogicException';无法加载请求的文件:helpers/spl_autoload_helper.php我也在使用PHP5.3。@Decrate2K“echo”当前php版本的结果是什么:'。phpversion;它说当前的版本是5.3.10-1Let-us。