传递新变量作为参考

Pass new variable as reference

我在 class 中有一个带有此签名的方法:

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,表示新的空变量)以填充结果。

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

这是一项作业。在 PHP 中,赋值的结果是被赋值的值,因此您将 true 传递给您的函数。该参数被定义为引用,您不能创建对 true.

的引用

你必须做的:

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