【发布时间】:2015-07-02 22:57:25
【问题描述】:
解决方案取自评论,因此我无法接受关闭此问题的答案。但我确实在下面发布了适合我的实际解决方案
我是 OOP 的新手,即使阅读了相当多的示例,我也无法弄清楚如何在不使用 $GLOBALS 的情况下使用相同的 mysql 连接。
如果有人可以像我两岁的孩子一样解释它,那将非常有帮助。
这是我的连接文件。
$hostname = 'hostname';
$username = 'db';
$password = 'password';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=db", $username, $password);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
但是要在类或函数中使用它,我会这样做:
class basic {
function simple($id) {
$query = $GLOBALS['dbh']->query("SELECT * FROM table WHERE id = $id");
$row = $query->fetch(PDO::FETCH_OBJ);
$thing = $row->partoftable;
echo $thing;
}
}
$first = new basic();
$first->simple(12);
这当然会返回我正在寻找的 ID 为 12 的 $thing。但是如果没有 GLOBALS['dbh'] 连接到数据库,我该怎么做呢?
也可以随意撕开其他任何东西,但请记住,这是我所说的最简单的例子。
提前致谢。
根据下面的评论,这是适合我的解决方案。
class basic {
function __construct($dbh)
{
$this->dbh = $dbh;
}
function simple($id) {
$query = $this->dbh->query("SELECT * FROM table WHERE id = $id");
$row = $query->fetch(PDO::FETCH_OBJ);
$thing = $row->partoftable;
echo $thing;
}
}
$first = new basic($dbh);
$first->simple(12);
谢谢。希望这对其他人有帮助。
【问题讨论】:
-
基本应该知道
$dbh,通过__constructor阅读更多Dependecy Injection -
@cske 谢谢!这太简单了,我一开始就无法理解它。我只需要在 $first = new basic($dbh) 中传递它,然后使用 __constructor 让它在课堂上发生。只是想更明确,以防其他人遇到这个问题。再次感谢!
标签: php mysql oop superglobals