我正在显示一个相对“沉重”的PHP页面。我有几个函数,每个函数都使用与DB的连接来获取一些行。我注意到在每个函数中创建一个新的$ 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传递给函数,但这样做我不需要返回并更改每个函数调用,它看起来更整洁)
答案 0 :(得分:1)
您可以使用:
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吗?
答案 1 :(得分:0)
使用全局$ 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作为第一个参数可能更好。