[英]PHP class not found with namespaces
我是使用命名空间的新手。 在此示例中,我创建了一个类,该类处理数据库连接,并且尝试在其他类中使用它。 你能解释出什么问题吗?
Connection.php
namespace Database;
class Connection
{
private static $instance = null;
private $pdo;
private function __construct()
{
$this->pdo = new PDO("mysql:host=localhost;dbname=database;", "root", "pw");
}
public static function get()
{
if (is_null(self::$instance))
self::$instance = new Connection();
return self::$instance;
}
}
Auth.php
namespace PHPAuth;
use Database\Connection;
class Auth
{
protected $dbh;
public function __construct()
{
$this->dbh = Connection::get();
...
提前致谢。
编辑:好的,现在我包含了自动加载器,并且包含类现在可以正常工作了。 但是现在在Auth中使用$dbh
时出现错误,例如$query = $this->dbh->query("SELECT * FROM...");
致命错误:在...中调用未定义的方法Database \\ Connection :: query()
我将为第一个问题添加答案(对您有用),以供参考: “名称空间不会自动加载文件。您需要为此添加自动加载器。”
Fatal error: Call to undefined method Database\\Connection::query()
答案在错误消息中。 您已将类Database\\Connection
为单例,其中Database\\Connection::get()
返回其自身的实例(该实例没有任何->query()
方法),而不是实际的PDO
实例。
如果您想让该方法返回PDO
实例,则可以执行以下操作:
namespace Database;
use PDO;
class Connection
{
private static $pdo;
private function __construct()
{
// Leave the constructor private so it still becomes
// a singleton and so we can't instantiate this class.
}
public static function get()
{
if (is_null(self::$pdo)) {
self::$pdo = new PDO("mysql:host=localhost;dbname=database;", "root", "pw");
}
return self::$pdo;
}
}
现在, Connection
类已成为PDO连接的工厂。
Connection::get()
将一遍又一遍地返回相同的PDO
实例,您应该能够从Auth
类中调用$this->dbh->query("...")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.