解决 Drupal 报错 Warning: Illegal string offset ‘field’ in DatabaseCondition->__clone()

1 报错原因

我曾经用 Drupal 建过站,虽不再更新,但里面有些文章还算有点价值,就把原来的程序挂在主机上。

Durpal 的设计哲学是完全不考虑大版本之间的兼容性,久不维护后,我遇到如下报错:

Drupal 报错 Illegal string offset 'field' in DatabaseCondition->__clone()

Warning: Illegal string offset 'field' 在 DatabaseCondition->__clone() (行 1895 在 /.../includes/database/query.inc).

这个报错是 PHP 5.3 或更早的版本对隐式转换的处理和 5.4 之后不一致带来的。详情可看这个页面:https://www.drupal.org/node/1414412

2 解决办法

找到对应的目录,打开 query.inc 文件,按照报错的行数,将如下代码:

function __clone() {
    $this->changed = TRUE;
    foreach ($this->conditions as $key => $condition) {
      if ($condition['field'] instanceOf QueryConditionInterface) {
        $this->conditions[$key]['field'] = clone($condition['field']);
      }
    }
  }

改成:

function __clone() {
    $this->changed = TRUE;
    foreach ($this->conditions as $key => $condition) {
      if ($key !== '#conjunction' && $condition['field'] instanceOf QueryConditionInterface) {
        $this->conditions[$key]['field'] = clone($condition['field']);
      }
    }
  }

即可解决。


如何解决 Drupal 报错 Warning: Illegal string offset ‘field’ in DatabaseCondition->__clone()、Drupal 报错怎么办、PHP 的隐式转换是什么。

版权声明:本站所有原创文章,作者保留版权。转载必须包含本声明,不得修改任何内容(包括文章标题),并以超链接的形式注明作者“Bary”和本文原始地址。

发表评论

电子邮件地址不会被公开。 必填项已用*标注