gpt4 book ai didi

PHP - 从 __construct 方法返回 MySQLi 对象

转载 作者:行者123 更新时间:2023-12-02 17:34:26 24 4
gpt4 key购买 nike

我有一个 Connection 类,如下所示:

class Connection{
private $link;

public function __construct(){
$this->link = new mysqli("localhost","root","","myDatabase");
return $this->link;
}

public function __destruct(){
$this->link->close();
}

}

我正在尝试这样做:

$link = new Connection();
$sql = "SELECT * FROM `events`";
$query = mysqli_query($link,$sql);
//Some stuff heref
$link->__destruct();

这是无效的吗?我收到以下错误:

Warning: mysqli_query() expects parameter 1 to be mysqli

最佳答案

Warning: mysqli_query() expects parameter 1 to be mysqli

这是因为$link实际上不是mysqli的一个实例;它是 Connection 的实例。

你不能从 __construct() 返回任何东西,因为它的目的只是构建一个 Connection 类本身的实例,而不是为 其他类return $this->link 没有达到您的预期。

您有几个选择。

你可以让你的类 extend mysqli,其中你主要只是硬编码凭据并用它们调用 parent::__construct(),这样就消除了完全需要 __destruct():

// Merely extends mysqli, hard-coding your credentials
class Connection extends mysqli{
// Your constructor has no params, and internally calls
// the parent constructor
public function __construct(){
parent::__construct("localhost","root","","myDatabase");
}
}

您为使用它而编写的代码将立即运行,但没有太多附加值,而且我认为这不是您真正想要的。

更好的选择:

如果你想创建一个存储和管理mysqli对象的类,你可以实例化它但不能返回它。您需要创建一个方法来返回它。

class Connection{
private $link;

// The constructor instantiates the mysqli
public function __construct(){
$this->link = new mysqli("localhost","root","","myDatabase");
}

// Other methods can operate on or manage the mysqli instance
public function __destruct(){
$this->link->close();
}

// Public accessor method to return the connection
public function getConnection() {
return $this->link;
}
}

然后调用该方法来检索连接。

$link = new Connection();
$sql = "SELECT * FROM atable";

// Call getConnection() to get the actual link
$query = mysqli_query($link->getConnection(), $sql);
$link->__destruct();

关于PHP - 从 __construct 方法返回 MySQLi 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28620807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com