如何使PDO对象在代码的任何部分(在对象,函数,方法,脚本等)中可用


How can I make the PDO object make it available in any section of the code(in objects, functions, methods, scripts etc.)?

数据库连接

$db_user = 'root';
$db_pass='';
$db = new PDO('mysql:host=localhost;dbname=resource_management', $db_user, $db_pass);

在这里创建了用户类

class User{     
    protected $username;
    protected $pass;
    public function __construct($username, $password){
        $this->username = $username;
        $this->password = $password;
    }   
    public function test(){     
        $sql = "select * from user";
        $data = $db->query($sql);
        while ($row = $data->fetch(PDO::FETCH_OBJ)){
            var_dump($row);
            echo $row->username;
        }
    }   
}

在这里,我尝试测试用户类

$user = new User('admin', 'test');
$user->test();

您通常会在构造函数中传递它或使用自动加载参数的工厂模式:

class Factory{
  public static function setdb($db) {
    self::$db = $db;
    }
  public static function getUser($role, $action) {
    return new User(self::$db, $role, $action);
    }
  public static function getUserPermissions($role, $action) {
    return new UserPermissions(self::$db, $role, $action);
    }
  }

类似的东西。注意:我不是模式专家,现在我正在学习它,所以上面的代码可能包含错误/不完美。然后,您可以像这样访问它:

$DB = new PDO(...);
factory::setdb($DB)
$User = Factory::getUser('admin', 'test');

我认为代码是不言自明的。然后,您可以添加其他方法来创建更多对象,并自动向它们传递所需的变量,这样您就不需要手动编写它们。它被称为工厂模式。您可以根据需要添加更多方法。

注意2:虽然全局变量是可能会想到的东西,但这是一个糟糕的主意。