给出PDO的强度而不是命名空间名称 - PSR4使用composer自动加载

时间:2016-02-16 19:28:03

标签: php mysql pdo composer-php psr-4

我正在尝试学习如何使用PDO。我有一个使用命名空间的非常小的应用程序。我使用composer来自动加载类。

我正在尝试遵循PHPTheRightWay MVC方法进行PDO,但我失败了。我已经设置了我的DbModel类来匹配它们的一个,在我的PHP代码中我创建了它的新实例并解析PDO对象。

类别:

namespace Acme;

class DbModel {

    protected $db;

    public function __construct(PDO $db)
    {
        $this->db = $db;
    }

    public function getAllPlayers()
    {
        return $this->db->query('SELECT * FROM player');
    }
}

页:

use Acme\DbModel;
use Acme\Player;
use Acme\Team;
use Acme\Match;

$db = new PDO('mysql:host=127.0.0.1;dbname=football', 'root', '');
$model = new DbModel($db);

但是,我收到以下错误。我不知道为什么会这样。

  

可捕获的致命错误:传递给Acme \ DbModel :: __ construct()的参数1必须是Acme \ PDO的实例,PDO的实例,在第9行的C:\ xampp \ htdocs \ footballMatch \ matchDay.php中调用并在第9行的C:\ xampp \ htdocs \ footballMatch \ src \ DbModel.php中定义

添加此课程后,我会运行composer installcomposer dump-autoload

1 个答案:

答案 0 :(得分:0)

将根命名空间前缀添加到PDO的任何地方,例如:

public function __construct(\PDO $db)

目前,您的脚本假定名为PDO的类应位于Acme名称空间下,但情况并非如此。