严格标准:RPA::PreLoadField()的声明应与Foundation::PreLoadField()的声明兼容


Strict Standards: Declaration of RPA::PreLoadField() should be compatible with that of Foundation::PreLoadField()

当我运行index.php并加载页面时,出现以下错误:

严格标准:RPA::PreLoadField()的声明应该与C:'xampps'htdocs'Res'RPA.php第39行中的Foundation::PreLoadField()的声明兼容

我看了一下RPA.php的第39行,这个类叫做:

class RPA extends Foundation

对这个错误有什么想法吗?

这个函数来自于foundations类:

public function PreLoadField($table, $column, $rowid, $coldata, &$value, $disabled=false)
        {
        $retval = false;
        if ($table === 'photos')
            {
            if ($column === 'blogentry')
                {
            $value = LookUpBlogEntries ($column, $coldata[$column]);
                $retval = true;     
                }
            }
        return $retval;
        }

这个函数来自RPA类:

public function PreLoadField($table, $column, $rowid, $coldata, &$value)
        {
        $retval = parent::PreLoadField($table, $column, $rowid, $coldata, &$value);
        return $retval;
        }

RPA扩展Foundation.

我的猜测(因为您没有发布足够的代码来判断)是您在父类中使用不同的签名重写了方法。如:

class A
{
    public function blah($a, $b) { }
}
class B extends class A
{
    public function blah($a) { }
}

PHP会报错(这是应该的)。调用代码需要提供一个或两个参数吗?

当我在joomla安装中打开E_STRICT时,我遇到了类似的警告。在每一个单独的情况下,我检查了两个函数,发现问题是在一个函数中传递的参数数量与另一个不同。作为一般规则,我能够通过添加缺失的参数(类似于$param = null)来修复所有错误。

我建议你对你的整个代码做一个搜索,看看这两个函数是如何被调用的。这可能会给你一个关于如何解决这个问题的提示。

祝你好运!

PS:顺便说一下,根据我的经验,你不一定要修复这些警告。在我的例子中,在我修复警告之前,joomla工作得很好。

在php.ini文件中,您需要更改error_reporting设置以排除E_STRICT。例如:error_reporting(E_ERROR | E_WARNING | E_PARSE);

请注意E_ALL也会导致这个问题,因为从PHP#5.0.0开始它包含了E_STRICT