我在一个有这个签名的类中有一个方法:
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表示新的空变量)来填充结果。
答案 0 :(得分:3)
Db::execute("query with :data", array(":data" => "data"), ($row = true));
^^^^^^^^^^^^^
这是一项任务。在PHP中,赋值的结果是赋值,因此您将true
传递给函数。该参数被定义为参考,您无法创建对true
的引用。
您必须这样做:
$row = true;
DB::execute(....., $row);