开发者

PHP autoload oddity

开发者 https://www.devze.com 2023-03-01 18:21 出处:网络
function __autoload($class_name) { echo(\"Attempting autoload \"); if (substr($class_name, -6) == \"Mapper\") {
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

精彩评论

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