不明白为什么自动加载不起作用

时间:2013-05-27 23:08:36

标签: php

所以这是我的自动加载 -

function __autoload($classname){
  include $classname.'.php';
}

我也试过使用DOCROOT以防万一......

function __autoload($classname){
  define('DOCROOT', dirname(__FILE__));
  include DOCROOT.'/'.$classname.'.php';
}

但是当遇到PatentAssignment类时,它说它找不到类的定义......

然而,如果我有一个

include 'PatentAssignment.php';

在将使用它的类的构造函数中,一切正常。不确定发生了什么。事实上,它甚至没有调用自动加载,只是对于该怎么做而感到困惑。

3 个答案:

答案 0 :(得分:1)

__autoload()不应该是类的成员方法 - 它应该是全局命名空间中的独立函数。

http://php.net/manual/en/language.oop5.autoload.php

答案 1 :(得分:1)

构造函数是什么样的(包含include)? 将自动加载代码放在所有类定义之前,最好在初始化php文件的顶部。 尝试调试:

function __autoload($classname) {
  echo 'looking for ' . $classname . ' in ' . getcwd();
  include $classname.'.php';
}
  1. http://php.net/manual/en/function.getcwd.php
  2. 获取当前的工作目录。您的所有文件都在同一个文件夹中吗?

    1. http://de3.php.net/manual/en/function.spl-autoload.php
    2. 改为使用spl_autoload:

        spl_autoload_register(function ($class) {
           include($class . '.php');
        });
      

答案 2 :(得分:0)

试试这个:

    spl_autoload_register(function($class) {
    //your function here
    return class_exists($class, false);
   });