1

嗨,我正在尝试使用 mysqli 而不是 mysql 重建我的代码,但是我在 php 类中遇到了 mysql 的问题:

$db = new mysqli('localhost','user','password','dbname');

require_once('classes/some_class.php');
$some_class = new some_class();

在 some_class.php 中:

 class some_class {
  function __construct() { $db->query('blablabla'); }
 }

这不起作用,但是:如果我添加$db = new ...some_class.php 它可以工作!

所以 some_class.php 不知道数据库连接:/

4

2 回答 2

1

some_class() 取决于您的 $db。

你有几个选择;

将依赖项作为参数传递:

$db = new mysqli('localhost','user','password','dbname');
// that could be in a different file

class some_class {
private $db;
function __construct($db) 
{
$this->db=$db; 
}
// eg - do a query
function getStuff($qry){
$this->db->query($qry); 
}
}

或者

正如你所说,让某个类实例化数据库连接

或者

使用全局变量。

各有利弊。还有其他方法。如果你想真正理解每一个的含义,我建议你至少给自己找一本非常好的 OOP 书。这些东西很聪明,但为每种情况找到正确的答案并不便宜。

于 2013-10-05T16:56:01.057 回答
1

您的变量超出范围,some_class不知道是什么$db。您需要$db作为参数传递。您可以在实例化类时执行此操作。

$db = new mysqli('localhost','user','password','dbname');

require_once('classes/some_class.php');
$some_class = new some_class($db);
 //Pass $db here -------------^ to the constructor

然后这将起作用。

class some_class {
    function __construct($db) { $db->query('blablabla'); }
}
//You receive $db here ---^
于 2013-10-05T17:00:51.860 回答