我正在从mysqli扩展一个类,但是当我想关闭数据库连接时,我不确定我是否正确执行:
class database extends mysqli
{
public function __construct($hostname = null,$username= null,$password = null,$database = null,$port = null, $socket = null)
{
$hostname = $hostname !== null ? $hostname : ini_get("mysqli.default_host");
$username = $username !== null ? $username : ini_get("mysqli.default_user");
$password = $password !== null ? $password : ini_get("mysqli.default_pw");
$database = $database !== null ? $database : "";
$port = $port !== null ? $port : ini_get("mysqli.default_port");
$socket = $socket !== null ? $socket : ini_get("mysqli.default_socket");
parent::__construct($hostname,$username,$password,$database,$port,$socket);
# Check for connection error
if (mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
}
#closes the database connection when object is destroyed.
public function __destruct()
{
return parent::close();
//echo "Destructor Called";
}
}
我是否已将return
放在parent::close();
前面?
return parent::close();
或者这样做?
public function __destruct()
{
parent::close();
}
感谢。
答案 0 :(得分:0)
使用析构函数的想法是当对象超出范围时自动调用它。因此,没有任何东西可以为...分配返回值。
最佳实践是析构函数(和构造函数)不返回任何内容(void)。
程序代码永远不应直接调用析构函数。
修改:要直接回答您的问题,请使用您的第二个示例
public function __destruct()
{
parent::close();
}
关于异常,请在构造函数中尝试这样的事情
if (mysqli_connect_errno()) {
throw new Exception('Connect failed: ' . mysqli_connect_error());
}
要捕获异常,只需使用try / catch块,例如
try {
$database = new database();
} catch (Exception $ex) {
echo $ex->getMessage(); // or whatever
}