我正在显示一个相对"沉重"的PHP页面。我有几个函数,每个函数都使用与数据库的连接来获取一些行。我注意到在每个函数中创建新$con会减慢很多速度,因此我自然而然地想对页面上的每个函数使用相同的$con。我试过这个:
$con = mysqli_connect("localhost","root","root", "mydb");
function fA($a, $b, &$con = $con)
{}
function fB($a, &$con = $con)
{}
您可以看到我正在尝试为每个函数传递指向 $con 的指针,但我为每个函数传递一个syntax error, unexpected $con
。(每当我调用函数时,我都可以将$con传递给函数,但这样做我不必返回并更改每个函数调用,而且看起来更整洁)
您可以使用:
global $con;
在每个函数主体的开头,如下所示:
function fA($a, $b) {
global $con
// ...etc...
}
但这通常被视为一种不好的做法。
更好的方法是使用依赖注入,这样您的逻辑就不会依赖于提供给它的存储设备类型。大致如下:
class LogicExecutor {
private $con;
public __construct($con) {
$this->con = $con;
}
public function doTaskOne($a, $b) {
// you can use $this->con in this scope
}
}
$con = mysqli_connect('localhost', 'root', 'root', 'mydb');
$le = new LogicExecutor($con);
$le->doTaskOne('a','b');
但即使这样,也会将您的代码与mysqli
紧密地耦合在一起。你考虑过ORM吗?
使用全局$con是可以的,最好的解决方案是将内容放入类中。
如果你坚持你原来的概念,你应该在每次函数调用时传递$con。
$con = mysqli_connect("localhost","root","root","mydb");
fA("abraca","dabra",$con);
fB("hocus-pocus",$con);
function fA($a, $b, &$con)
{}
function fB($a, &$con)
{}
也许最好使用 $con 作为第一个参数。