Php PDO在其他类中使用它扩展类而不扩展类

时间:2013-02-03 16:07:10

标签: php class pdo

  

可能重复:
  PHP and PDO class question

我想知道是否有人可以帮助我有一个基本的php PDO扩展类,我想在其他类中使用全局$ db来完成所有mysql的工作。我可以连接到数据库,但只想使用我可以在任何类中访问的全局变量。

但我不想用我的新类扩展数据库类,我也不想在类构造函数中传递数据库连接var。

有办法做到这一点吗?

这里有一些编码样本我想要解决任何编码错误。

//--DATABASE CLASS
class Database Extends PDO {

    protected $database_hostname = DB_HOST;
    protected $database_username = DB_USER;
    protected $database_password = DB_PASSWORD;
    protected $database_name = DB_NAME;
    protected $database_type = DB_TYPE;

    public function __construct() {

        try {
            parent::__construct($this->database_type . ':host=' . $this->database_hostname . ';dbname=' . $this->database_name, $this->database_username, $this->database_password, array(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION));
        } catch (PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }

}



//--TEST CLASS
class test1 {

    //--INSIDE MY FUNCTIONS I WANT TO BE ABLE TO USE A $db to do my msql stuff
    public function test1a() {

        $stmt = $db::prepare('SELECT * FROM table');
        $stmt->excute();
    }

}

//--TEST CLASS 2
class test2 {

    public function test2a() {

        $stmt = $db::prepare('SELECT * FROM table');
        $stmt->excute();
    }

}

//--CREATE THE DATABASE GLOBAL
 $db = new Database();
 $testers = new test2();

如果我做了上述操作,我会收到错误消息,说$ db是未定义的变量:db

2 个答案:

答案 0 :(得分:1)

虽然我读过不推荐的内容,但您可以执行以下操作:在所有类之外(在全局范围内)初始化您的连接:
$db = new Database();
然后在您需要Db连接的每个功能中,写下:
global $db;

答案 1 :(得分:1)

在函数内部使用$db时,PHP期望变量位于本地函数范围内。要访问全局变量,请使用

  1. $GLOBALS['db']->prepare重要:使用->代替::;静态调用prepare无效,
  2. global $db; $db->prepare(...);