找不到名称空间的PHP类

时间:2016-12-23 16:12:02

标签: php class 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();
        ...

提前致谢。

编辑:好的,现在我已经加入了自动加载器,包括类现在正常工作。但现在我在$dbh

等Auth中使用$query = $this->dbh->query("SELECT * FROM...");时遇到错误
  

致命错误:调用未定义的方法Database \ Connection :: query()   在...

1 个答案:

答案 0 :(得分:1)

未找到课程的第一个问题

我将为第一个问题添加答案(对您有用)以供参考:“命名空间不会自动加载文件。您需要为此添加自动加载器。” < / p>

未定义方法的第二个问题

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个实例,您应该可以从$this->dbh->query("...")课程中致电Auth