0

我正在显示一个相对“沉重”的 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 传递给函数,但这样做我不必返回并更改每个函数调用,而且看起来更整洁)

4

2 回答 2

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吗?

于 2013-11-09T20:36:19.537 回答
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 作为第一个参数。

于 2013-11-09T21:08:31.047 回答