Search code examples
phpautoloadautoloader

How do I NOT autoload a class in php?


the autoloader at the beginning of my php code

function __autoload($class_name) {
    include_once $class_name . '.class.php';
}

is causing a call to new MongoClient(); to fail with the error Warning: include_once(MongoClient.class.php): failed to open stream

How can I use the autoloader for my classes and still use the standard classes?

Note: MongoDb has been installed with PECL and works fine with the autoloading function removed. mongo-1.3.0beta2 on php 5.4.9


Solution

  • __autoload(), if defined, is called each time you try to access a class that has not been imported manually using require_once() or include_once() and is not part of the PHP internal classes.

    In your case the __autoload() is triggered although you try to access a PHP internal class - MongoClient that is provided by the php-mongo extension. When you are not using __autoload() it works as expected.

    It looks like the extension doesn't speak well with the PHP interpreter. You should first try an update from the beta to the stable 1.3.1 version. If this won't help, it will need further investigation.


    Btw, if you try to instantiate a MongoClient object inside a namespace use \MongoClient(), like this:

    namespace Foo;
    
    $client = new \MongoClient();
    

    The \ refers to the global namespace.