传递新变量作为参考

时间:2015-06-15 19:48:32

标签: php pass-by-reference

我在一个有这个签名的类中有一个方法:

public static function execute($query, $data = array(), &$result = NULL, $onlyOne = true)

重点是执行带有数据的SQL查询(如果相关)并修改结果变量(如果设置为true),如果调用者只对它感兴趣,最后只返回第一行。它处理SQL错误等,总的来说是一件很方便的事情,因为我尝试将脚本中的sql查询减少到一行或两行(检查结果)。

现在我有一个问题:

Db::execute("query with :data", array(":data" => "data"), ($row = true));

PHP抱怨$ row不是变量:

Strict standards: Only variables should be passed by reference

据我了解PHP范围,范围是功能范围而不是块范围(例如在C ++中)。因此$row应该是我的函数范围中的变量,并且可以作为引用传递(而不仅仅是函数调用中的临时)。如果我事先声明它可行,但它会稍微膨胀一下代码。有没有办法像这样在函数调用中保持该变量的声明?

编辑:添加到接受的答案。可以为引用分配任何默认值,因此我将签名更改为:

public static function execute($query, $data = array(), &$result = -1, $onlyOne = true)

允许我使用:

来调用它
Db::execute("query with :data", array(":data" => "data"), $row);

没有预先声明结果变量。在里面我只是检查$ result是不是-1(或者我可以检查它是否为NULL表示新的空变量)来填充结果。

1 个答案:

答案 0 :(得分:3)

Db::execute("query with :data", array(":data" => "data"), ($row = true));
                                                          ^^^^^^^^^^^^^

这是一项任务。在PHP中,赋值的结果是赋值,因此您将true传递给函数。该参数被定义为参考,您无法创建对true的引用。

您必须这样做:

$row = true;
DB::execute(....., $row);