【问题标题】:Strict standards: Declaration of SugarFieldTime::save() should be compatible with SugarFieldBase::save()严格的标准:SugarFieldTime::save() 的声明应该与 SugarFieldBase::save() 兼容
【发布时间】:2017-09-20 07:41:36
【问题描述】:

我的代码中出现此错误。

严格标准:SugarFieldTime::save() 的声明应与 C:\wamp\www\ 中的 SugarFieldBase::save(&$bean, $params, $field, $properties, $prefix = '') 兼容ArcusCRMDemo\include\SugarFields\Fields\Time\SugarFieldTime.php 在第 95 行

我还检查了可见性和参数列表以及初始值。

我的源代码:

SugarFieldBase.php

public function save(&$bean, $params, $field, $properties, $prefix = '')
{
    if (isset($params[$prefix . $field])) {
        if (isset($properties['len']) && isset($properties['type']) && $this->isTrimmable($properties['type'])) {
            $bean->$field = trim($this->unformatField($params[$prefix . $field], $properties));
        } else {
            $bean->$field = $this->unformatField($params[$prefix . $field], $properties);
        }
    }
}

SugarFieldTime.php

   function save(&$bean, $params, $field, $properties, $prefix = '') {
        global $timedate;
        if ( !isset($params[$prefix.$field]) ) {
            $bean->$field = '';
            return;
        }

        $bean->$field = $timedate->to_db_time($params[$prefix.$field], false);
    }

【问题讨论】:

  • 不确定问题是否出在引用上,但从逻辑上讲,不应允许通过引用传递值来覆盖传递值。当您调用父类时,您期望原始变量在传递应由子类保留的值类型时保持不变
  • 我也试过了,但问题仍然无法解决
  • @Karthik 提示您未来的问题,如果您不引用任何内容,请不要使用块引号。
  • @matt 我听不懂你在说什么......
  • @Karthik 当我没有建议您尝试时,“我试过了”这句话没有任何意义

标签: php


【解决方案1】:

在你的保存函数()中有一个语法错误:

你用过:

$bean->$field = ''

应该是:

 $bean->$field = '';

分号不见了。

【讨论】:

  • 对不起,编辑错误
【解决方案2】:

子函数与父函数不兼容。应该是:

SugarFieldTime.php

public function save(&$bean, $params, $field, $properties, $prefix = '')

注意& 已从除$bean 之外的所有参数中消失

推理正如我评论的那样:

当您调用父类时,您期望原始变量在传递应由子类保留的值类型时保持不变。这是因为您可以传递伪装成父类对象的子类(因为 Liskov substitution principle 成立)并且您希望所有对 save 方法的调用不会改变 $params 的原始内容,如果 $params是一个值类型(例如 int、string、array、float)

【讨论】:

  • @Karthik 只有$bean 有这个参考。没有别的
  • 除了你的回答之外,SugarFieldTime.php文件中的save函数存在语法错误:即$bean->$field = ''分号丢失。
  • @AmrinderSingh 抱歉,源代码中存在编辑错误分号
  • @apokryfos 是的老板......我尝试了你所有的建议,但没有解决
  • @Karthik 用您尝试过但仍然无效的方法更新您的问题
猜你喜欢
  • 2012-04-03
  • 2014-09-28
  • 2013-06-18
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多