开发者

PHP autoload oddity

function __autoload($class_name) {
    echo("Attempting autoload ");
    if (substr($class_name, -6) == "Mapper") {
        $file = 'mappers/'.$class_name.'.php';
        echo "Will autoload $file ";
        include_once($file);
    }
}
__autoload("UserMapper");
$user = new UserMapper($adapter);

die("done");

Result: Attempting autoload Will autoload mappers/UserMapper.php done

function __autoload($class_name) {
    echo("Attempting autoload ");
    if (substr($class_name, -6) == "Mapper") {
        $file = 'mappers/'.$class_name.'.php';
        echo "Will autoload $file ";
      开发者_JAVA百科  include_once($file);
    }
}
//__autoload("UserMapper");
$user = new UserMapper($adapter);

die("done");

(I just commented out the manual call to __autoload()...)

Result: Fatal error: Class 'UserMapper' not found in C:\Program Files\EasyPHP-5.3.5.0\www\proj\29letters\login.php on line 13

Any ideas? And yes, I'm running PHP 5.3.5


Not sure why your example isn't working, as it should be as per the manual.

Have you tried using spl_autoload_register to register the autoloader function?


Have you set a proper include_path? You're using a relative path to include the class's file. Try an absolute path instead.

$dir  = __DIR__ . '/../path/to/mappers';
$file = $dir . '/' . $class_name . '.php';
require $file;

or

// do this outside of __autoload
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/../path/to/mappers';

// inside __autoload
$file = $class_name . '.php';
require $file;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜