函数:将指针传递给$ con

时间:2013-11-09 20:34:41

标签: php function pointers

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

2 个答案:

答案 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作为第一个参数可能更好。