繁体   English   中英

找不到命名空间的PHP类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM