Rolf
Rolf

Reputation: 5753

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 ";
        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

Upvotes: 0

Views: 372

Answers (2)

Philippe Gerber
Philippe Gerber

Reputation: 17876

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;

Upvotes: 0

Jani Hartikainen
Jani Hartikainen

Reputation: 43253

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?

Upvotes: 3

Related Questions