PHP-PDO连接类-无法访问

PHP-PDO连接类-无法访问,php,mysql,function,class,pdo,Php,Mysql,Function,Class,Pdo,我目前正在使用OOP和PDO编写我的第一个PHP应用程序。在这样做的过程中,我正在处理一个连接类,以便在需要时启动数据库连接。我相信我的方式是依赖注入 我当前在尝试访问连接时出错 这是我的连接类: class db{ private $host = ''; private $dbname = ''; private $username = ''; private $password =''; public $con = ''; funct

我目前正在使用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.

如果您对我的错误操作有任何建议,我们将不胜感激。

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

$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!';

        }
    }
}

因此,从短语“必须是db的实例,未给定”中,您实际上无法理解什么?我删除了这些值,以便将其发布到此处:)我添加了db实例,但仍然收到相同的错误。该错误意味着参数已过空值。你能把代码粘贴到“OtherClass”被实例化的地方吗?我已经更新到了你更新的连接类。目前我正在启动该连接类下的另一个类。使用:$con=新数据库;$class=新用户($con);