Как НЕ автозагрузить класс в php?

автозагрузчик в начале моего PHP-кода

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

вызывает вызов new MongoClient(); сбой с ошибкой Warning: include_once(MongoClient.class.php): failed to open stream

Как я могу использовать автозагрузчик для своих классов и все еще использовать стандартные классы?

Примечание. MongoDb был установлен с PECL и отлично работает с удаленной функцией автозагрузки. mongo-1.3.0beta2 по php 5.4.9

__autoload() , если он определен, вызывается каждый раз, когда вы пытаетесь получить доступ к классу, который не был импортирован вручную, используя require_once() или include_once() и не является частью внутренних классов PHP.

В вашем случае __autoload() хотя вы пытаетесь получить доступ к внутреннему классу PHP – MongoClient , предоставляемому расширением php-mongo. Когда вы не используете __autoload() он работает так, как ожидалось.

Похоже, что расширение не хорошо говорит с интерпретатором PHP. Сначала вы должны попробовать обновление с бета-версии до версии 1.3.1. Если это не поможет, это потребует дальнейшего расследования.


Btw, если вы попытаетесь создать экземпляр объекта MongoClient внутри пространства имен, используйте \MongoClient() , например:

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

\ Относится к глобальному пространству имен.

PHP не будет пытаться автозагружать все, что находится в stl (например, PDO, mysqli и т. Д.).

Если MongoClient не является одним из этих типов классов, он попытается автозагрузить его.

Убедитесь, что у вас установлен PECL

Как отметил Нил, убедитесь, что у вас установлен клиент PECL mongo, и имейте в виду, что PHP иногда использует другой файл php.ini для CLI.

Если в CLI вы можете получить правильный php.ini , выполнив:

 php -r "phpinfo();" | grep "php.ini" 

Итак, после проверки PECL убедитесь, что у вас есть extension=mongo.so в правильном php.ini