【问题标题】:PHP - Strict standards: Only variables should be passed by reference [duplicate]PHP - 严格标准:只有变量应该通过引用传递[重复]
【发布时间】:2015-05-27 15:26:26
【问题描述】:

这是有问题的代码:

$sql  = "INSERT INTO club_territories (`club_id`, `teritorije_id`) VALUES ";
foreach ($params['territories'] as $key => $territory) {
    $sql .= "('" . $clubId . "', '" . $territory . "')";
    if ($key == end(array_keys($params['territories']))) {
      $sql .= ';';
    } else {
      $sql .= ',';
    }
}
return $query = mysql_query($sql, $this->link); 

在第 4 行我有错误:严格标准:只有变量应该通过引用传递。这不是我的代码,我必须尽快修复它。有谁知道是什么问题?谢谢

【问题讨论】:

  • 你做过研究吗?

标签: php mysql


【解决方案1】:

查看end() 签名:mixed end(array &$array)。它需要对数组的引用,但您提供了函数的返回值。这在严格模式下是不允许的。

$sql  = "INSERT INTO club_territories (`club_id`, `teritorije_id`) VALUES ";
foreach ($params['territories'] as $key => $territory) {
    $sql .= "('" . $clubId . "', '" . $territory . "')";
    $keys = array_keys($params['territories']);
    if ($key == end($keys)) {
        $sql .= ';';
    } else {
        $sql .= ',';
    }
}
return $query = mysql_query($sql, $this->link);

【讨论】:

  • 谢谢你,你救了我的命。你能解释一下是什么问题吗?
  • 刚刚编辑了我的答案。
  • 函数的返回值代替是不允许的,问题更多的是他从函数中得到什么样的返回值
  • @Rizier123 他得到了一个数组,因为array_keys() 总是返回一个数组并且它确实有效。但在严格模式下,仅允许通过引用传递变量,而不是返回值。
【解决方案2】:

问题出在你的 if 语句中:

end(array_keys($params['territories']))

您不能通过引用传递array_keys() 的输出,因此您必须先将其分配给一个变量才能通过引用传递它。像这样:

$a = array_keys($params['territories']);
if ($key == end($a)) {

为什么你必须这样做?

因为end()将数组的内部指针设置为最后一个元素,所以它是通过引用来做到这一点的(你也会注意到你不必分配end的返回值,因为它都是通过引用来完成的)。所以不能通过引用传递array_keys()的返回值,因为只能通过引用传递以下内容:

  • 变量,即 foo($a)
  • 新语句,即 foo(new foobar())
  • 从函数返回的引用,即:

您可以在手册中阅读有关通过引用传递的更多信息:http://php.net/manual/en/language.references.pass.php

【讨论】:

猜你喜欢
  • 2014-11-01
  • 2016-10-05
  • 1970-01-01
  • 2014-08-17
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多