我的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
答案 0 :(得分:4)
PHP将不尝试自动加载stl中的任何内容(如PDO,mysqli等)
如果MongoClient
不是这些类型的类别之一,它会尝试自动加载它。
答案 1 :(得分:0)
__autoload()
或require_once()
手动导入且不属于PHP内部类的类时,都会调用 include_once()
(如果已定义)。
在您的情况下,虽然您尝试访问php-mongo扩展提供的PHP内部类__autoload()
,但会触发MongoClient
。当您不使用__autoload()
时,它会按预期工作。
看起来扩展程序与PHP解释器的说话不太好。您应首先尝试从测试版到稳定版1.3.1版的更新。如果这没有帮助,则需要进一步调查。
顺便说一下,如果你试图在命名空间中实例化MongoClient
对象,请使用\MongoClient()
,如下所示:
namespace Foo;
$client = new \MongoClient();
\
指的是全局命名空间。
答案 2 :(得分:0)
正如Neal指出的那样,请确保安装了PECL mongo客户端,并记住有时PHP会为CLI使用不同的php.ini
文件。
如果在CLI中,您可以通过执行以下操作获得正确的php.ini
:
php -r "phpinfo();" | grep "php.ini"
因此,在检查PECL后,请确保extension=mongo.so
正确php.ini