我试图将一个常用的方法(opendb)放在与我的连接配置文件相同的类和文件中(connect.php)参见图A
class qcon{
public static $conn;
function dbcon()
{
if (empty($conn))
{
$host = 'x';
$username = 'x';
$password = 'x';
$dbname = 'x';
$conn = mysqli_connect($host , $username , $password ,$dbname) or die("Oops! Please check SQL connection settings");
}
return $conn;
}
function openDB($conn)
{
if (!$conn)
{
$this->error_msg = "connection error could not connect to the database:! ";
return false;
}
$this->conn = $conn;
return true;
}
现在我希望能够传递图A的连接输出,以便我可以正确使用另一个类文件中的方法。称之为class.php。这是class.php上用于查看记录的一个示例函数。见图。乙
require_once("assets/configs/connect.php");
class dbcats {
var $conn;
function getResult(){
$result = mysqli_query($this->conn , "SELECT * from felines" );
if ($result) {
return $result;
}
else {
die("SQL Retrieve Error: " . mysqli_error($this->conn));
}
}
function closeDB() {
mysqli_close($this->conn);
}
现在,为了让工作电话,下面的图C是我所在的地方。我有点卡住了。
$db1 = new qcon();
$helper = new dbcats();
$db1->openDB();
$helper = $db1;
$result = $helper->getResult();
所以我们在这里。逻辑很简单(如果我不太清楚的话,我会更新问题)那么有人会建议我需要哪些修改才能使呼叫正常运行吗?
答案 0 :(得分:2)
Orangepill的解决方案很好,很可能会让你快速前进。但是,我建议您对课程进行一些小修改,以便您更轻松地在整个课程中重复使用其功能。
此处,qcon
保存您的数据库连接信息和功能。它有一个getter方法getConn()
,允许你获取,并根据需要传递该连接。
class qcon
{
protected $conn;
public function __construct() { ... }
public function dbcon() { ... }
public function openDB() { ... }
public function closeDB() { ... }
public function getConn() { return $this->conn; }
}
以下是替代dbcats
类的示例。它将qcon
类作为其构造的一部分,并将其作为受保护的成员变量保存,以便在需要时可以使用它。它还具有getter和setter,以便您可以通过getQConn()
和setQConn()
随时更改或检索此类的数据库连接。
class dbcats
{
protected $qcon;
public function __construct(qcon $q) { $this->qcon = $q; }
public function getResult() { ... }
public function getQConn() { return $this->qcon; }
public function setQCon(qcon $q) { $this->qcon = $q; }
}
这可能不是最快的解决办法,但我相信这样的做法从长远来看会对你有所帮助。
答案 1 :(得分:0)
从我所看到的,你在两个课程中都缺少最后的花括号}。如果正确缩进,一切都会更容易看到。也就是说,每次你有一个左大括号{下面的行将缩进一个标签。像这样:
class qcon {
public static $conn;
function dbcon()
{
if (empty($conn))
{
$host = 'x';
$username = 'x';
$password = 'x';
$dbname = 'x';
$conn = mysqli_connect($host , $username , $password ,$dbname) or die("Oops! Please check SQL connection settings");
}
return $conn;
}
function openDB($conn)
{
if (!$conn)
{
$this->error_msg = "connection error could not connect to the database:! ";
return false;
}
$this->conn = $conn;
return true;
}
} <<< Missing this one
class dbcats {
var $conn;
function getResult(){
$result = mysqli_query($this->conn , "SELECT * from felines" );
if ($result) {
return $result;
}
else {
die("SQL Retrieve Error: " . mysqli_error($this->conn));
}
}
function closeDB() {
mysqli_close($this->conn);
}
} <<< Missing this one
答案 2 :(得分:0)
您需要将qcon类的实例注入dbcats类。
require_once("assets/configs/connect.php");
class dbcats {
var $conn;
public function __construct(qcon $dbconn){
$this->conn = $dbconn;
}
function getResult(){
$result = mysqli_query($this->conn , "SELECT * from felines" );
if ($result) {
return $result;
}
else {
die("SQL Retrieve Error: " . mysqli_error($this->conn));
}
}
function closeDB() {
mysqli_close($this->conn);
}
}
然后当你在conn的实例中创建一个dbcats传递实例时...
$db1 = new qcon();
$db1->openDB();
$helper = new dbcats($db1);
$result = $helper->getResult();