0

我目前正在使用 OOP 和 PDO 编写我的第一个 PHP 应用程序。为此,我正在研究一个连接类,以便在需要时可以启动数据库连接。我相信我这样做的方式是依赖注入。

我目前在尝试访问连接时遇到错误。

这是我的连接类:

class db{

    private $host = '';
    private $dbname = '';
    private $username = '';
    private $password ='';  

    public $con = '';

    function __construct(){

        $this->connect();   

    }

    function connect(){

        try{

            $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username, $this->password);
            $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

        }catch(PDOException $e){

            echo 'We have a problem!';

        }
    }
}

这就是我试图在其他类中调用它的方式。

    private $con;

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

但是,这是我在尝试运行它时收到的错误。

    Catchable fatal error: Argument 1 passed to users::__construct() must be an instance of db, none given.

任何关于我做错了什么的建议将不胜感激。

4

1 回答 1

2

您需要首先创建数据库实例并将其传递给“其他”类的构造函数

$db = new DB();
$class = new OtherClass($db);

除此之外,还有其他问题:

DB 类构造函数没有为数据库名称、用户和密码等赋值。一种方法是将这些设置传递给 DB 的构造函数并将值赋值给私有属性。

class DB{

    private $host = '';
    private $dbname = '';
    private $username = '';
    private $password ='';

    public $con = '';

    function __construct($host, $dbname, $username, $password){

        $this->host = $host;
        $this->dbname = $dbname;
        $this->username = $username;
        $this->password = $password;
        $this->connect();

    }

    function connect(){

        try{

            $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username, $this->password);
            $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

        }catch(PDOException $e){

            echo 'We have a problem!';

        }
    }
}
于 2013-10-10T04:26:32.010 回答