严格的标准:SugarFieldTime :: save()的声明应该与SugarFieldBase :: save()兼容

时间:2017-09-20 07:41:36

标签: php

我的代码中出现此错误。

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

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

我的源代码:

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);
    }

2 个答案:

答案 0 :(得分:0)

子功能与父功能不兼容。它应该是:

<强> SugarFieldTime.php

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

请注意&除了$bean

之外的所有参数都已消失

正如我所评论的那样:

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

答案 1 :(得分:0)

保存功能()中存在语法错误:

你曾经使用过:

$bean->$field = ''

它应该是:

 $bean->$field = '';
分号丢失了。