3

我的 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 一起安装,并且在删除自动加载功能后可以正常工作。php 5.4.9 上的 mongo-1.3.0beta2

4

3 回答 3

4

PHP不会尝试自动加载 stl 中的任何内容(如 PDO、mysqli 等)

如果MongoClient不是这些类型的类之一,它将尝试自动加载它。

确保您已安装 PECL

于 2012-12-17T22:42:46.060 回答
0

__autoload(),如果已定义,则在您每次尝试访问尚未使用手动导入的类时调用,require_once()或者include_once()不是 PHP 内部类的一部分。

在您的情况下,__autoload()尽管您尝试访问 PHP 内部类(MongoClient由 php-mongo 扩展提供),但仍会触发。当您不使用__autoload()它时,它会按预期工作。

看起来扩展与 PHP 解释器不兼容。您应该首先尝试从 beta 更新到稳定的 1.3.1 版本。如果这没有帮助,则需要进一步调查。


顺便说一句,如果您尝试MongoClient在命名空间 use 中实例化一个对象\MongoClient(),如下所示:

namespace Foo;

$client = new \MongoClient();

\指的是全局命名空间。

于 2012-12-17T22:47:42.517 回答
0

正如 Neal 所指出的,请确保您已安装 PECL mongo 客户端,并请记住,有时 PHPphp.ini会为 CLI 使用不同的文件。

如果在 CLI 中,您可以通过执行以下操作获得正确php.ini

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

所以,在检查了 PECL 之后,确保你有extension=mongo.so正确的php.ini

于 2013-09-04T13:38:41.580 回答