1

PDO の使用方法を学習しようとしています。名前空間を使用する非常に小さなアプリケーションがあります。composer を使用して、クラスを自動ロードします。

PDO への PHPTheRightWay MVC アプローチに従おうとしていますが、失敗しています。私は自分の 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 で呼び出され、次のように定義されますC:\xampp\htdocs\footballMatch\src\DbModel.php 9 行目

このクラスを追加した後、 and を実行composer installcomposer dump-autoloadます。

4

1 に答える 1

0

ルート名前空間の接頭辞を PDO に追加します。たとえば、次のように使用されます。

public function __construct(\PDO $db)

今のところ、スクリプトは PDO という名前のクラスが Acme 名前空間にあると想定していますが、そうではありません。

于 2016-02-16T20:11:52.513 に答える