当我运行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