函数:传递指向$con的指针


Functions: pass pointer to $con

我正在显示一个相对"沉重"的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 作为第一个参数。