我可能做了一件非常愚蠢的事情,但这就是这笔交易。 我创建了一个名为Database的类,它非常简单,只能容纳2个函数。只是为了打开和关闭mysqli连接。
<?php
error_reporting(E_ALL);
require_once("sdl_config.php");
class Database {
/* Open the connection with the database */
public function OpenConnection() {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if($mysqli->connect_error) {
die('Connection Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error );
} else {
echo 'Connection Succeeded';
}
}
/* Close the connection with the database */
public function CloseConnection() {
if($mysqli) {
$mysqli->close();
echo 'Connection Closed';
} else {
echo 'Connection does not exist';
}
}
}
为了测试这个,我创建了另一个页面,只调用了2个函数。
<?php
require_once("include/class.database.php");
Database::OpenConnection();
Database::CloseConnection();
打开连接完美无缺,但问题出现在CloseConnection函数中。它永远不会找到$ mysqli变量,当我之前打开它时,这怎么可能?
另外,我已经读到有些人说手动关闭连接有点过时了,其他人说这样做是最好的。那么这里最好的做法是什么,什么时候应该关闭连接呢?
提前谢谢。
答案 0 :(得分:3)
函数中定义的变量是局部的,仅在该函数本身内可见。
你应该使用OOP允许我们做的事情,并使该变量成为一个类'property:
class Database {
private $mysqli;
/* Open the connection with the database */
public function OpenConnection() {
$this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if($this->mysqli->connect_error) {
die('Connection Error (' . $this->mysqli->connect_errno . ') ' . $this->mysqli->connect_error );
} else {
echo 'Connection Succeeded';
}
}
/* Close the connection with the database */
public function CloseConnection() {
if($this->mysqli) {
$this->mysqli->close();
echo 'Connection Closed';
} else {
echo 'Connection does not exist';
}
}
}
但你现在需要使用类的对象:
<?php
require_once("include/class.database.php");
$db = new Database;
$db->OpenConnection();
$db->CloseConnection();
参考: