Ali*_*Ali 3 php global class object
如何在类中使用全局DB变量?假设我在config.php中有这个
$dbh = new PDO("mysql:host=localhost;dbname=mydb", "root", "");
Run Code Online (Sandbox Code Playgroud)
我想在这个$ dbh内部类中使用如下(MyClass.php)
class MyClass
{
public function DoSomething($plogin_id)
{
$sql = "SELECT * FROM mytable WHERE login_id = :login_id";
$stmt = $dbh->prepare($sql); //line 14
$stmt->bindParam(':login_id', $plogin_id, PDO::PARAM_STR);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的index.php文件中,我使用这个MyClass如下:
include "config.php";
$MyObject = new MyClass();
$login_result = $MyObject->DoSomething("admin");
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
致命错误:在第14行的C:\ xampp\htdocs\MyProject\admin\includes\classes\MyClass.php中的非对象上调用成员函数prepare()
你必须$dbh以MyClass某种方式传递对象.既然你不想使用全局变量,我建议你把它传递给MyClass构造函数.
你的MyClass和index.php看起来像这样:
class MyClass
{
protected $dbh = null;
public function __construct ( PDO $Pdh )
{
$this->dbh = $Pdh;
}
public function DoSomething($plogin_id)
{
$sql = "SELECT * FROM mytable WHERE login_id = :login_id";
$stmt = $this->dbh->prepare($sql); //line 14
$stmt->bindParam(':login_id', $plogin_id, PDO::PARAM_STR);
}
}
// in your index.php
$MyObject = new MyClass ( $dbh );
Run Code Online (Sandbox Code Playgroud)
这基本上是一种称为依赖注入的模式.有关这是什么的更多信息,请参阅此优秀教程.