给定的 PDO 实例而不是命名空间名称 - PSR 4 Autoloading with composer
Isntance of PDO given instead of namespace name - PSR4 Autoloading with composer
我正在努力学习如何使用 PDO。我有一个非常小的应用程序,它使用命名空间。我使用 composer 自动加载 classes.
我正在尝试遵循 PHPTheRightWay MVC 方法来处理 PDO,但我失败了。我已经设置了我的 DbModel class 以匹配他们的模型,并且在我的 php 代码中我创建了它的一个新实例并解析了 PDO 对象。
Class:
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);
但是,我收到以下错误。我不知道为什么会这样。
Catchable fatal error: Argument 1 passed to Acme\DbModel::__construct() must be an instance of Acme\PDO, instance of PDO given, called in C:\xampp\htdocs\footballMatch\matchDay.php on line 9 and defined in C:\xampp\htdocs\footballMatch\src\DbModel.php on line 9
添加此后 class 我 运行 composer install
和 composer dump-autoload
.
将根名称空间前缀添加到 PDO 的任何使用位置,例如:
public function __construct(\PDO $db)
目前,您的脚本假设 class 命名的 PDO 应该在 Acme 命名空间下,但事实并非如此。
我正在努力学习如何使用 PDO。我有一个非常小的应用程序,它使用命名空间。我使用 composer 自动加载 classes.
我正在尝试遵循 PHPTheRightWay MVC 方法来处理 PDO,但我失败了。我已经设置了我的 DbModel class 以匹配他们的模型,并且在我的 php 代码中我创建了它的一个新实例并解析了 PDO 对象。
Class:
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);
但是,我收到以下错误。我不知道为什么会这样。
Catchable fatal error: Argument 1 passed to Acme\DbModel::__construct() must be an instance of Acme\PDO, instance of PDO given, called in C:\xampp\htdocs\footballMatch\matchDay.php on line 9 and defined in C:\xampp\htdocs\footballMatch\src\DbModel.php on line 9
添加此后 class 我 运行 composer install
和 composer dump-autoload
.
将根名称空间前缀添加到 PDO 的任何使用位置,例如:
public function __construct(\PDO $db)
目前,您的脚本假设 class 命名的 PDO 应该在 Acme 命名空间下,但事实并非如此。