0

我有一个问题easyblog。当我尝试通过后端打开博客条目时,出现以下错误:

致命错误:EasyBlogTableMediaManager::bind() 的声明必须与第 46 行 /home/mysit/public_html/localadvertiser/administrator/components/com_easyblog/tables/mediamanager.php 中的 JTableInterface::bind() 的声明兼容

我正在运行Joomla 3.2.5 错误报告设置为“最大值”。知道这里可能出现什么问题吗?

这是发生错误的文件

class EasyBlogTableMediaManager extends EasyBlogTable
{
    var $id     = null;
    var $path   = '';
    var $type   = '';
    var $params = '';
    function __construct(& $db )
    {
        parent::__construct( '#__easyblog_mediamanager' , 'id' , $db );
    }
    public function bind( $data = array() )
    {
        return parent::bind( $data );
    }
    public function load( $path , $type )
    {
        $db     = EasyBlogHelper::db();
        $query  = 'SELECT * FROM ' . EasyBlogHelper::getHelper( 'SQL' )->nameQuote( $this->_tbl );
        $query  .= ' WHERE ' . EasyBlogHelper::getHelper( 'SQL' )->nameQuote( 'path' ) . '=' . $db->Quote( $path );
        $query  .= ' AND ' . EasyBlogHelper::getHelper( 'SQL' )->nameQuote( 'type' ) . '=' . $db->Quote( $type );
        $db->setQuery( $query );
        $obj    = $db->loadObject();
        return parent::bind( $obj );
    }
}
4

2 回答 2

0

TLDR

是的,我认为发生错误是因为您将错误报告设置为最大值,这可能会强制一种STRICT模式,如果您将级别设置为None它应该可以正常工作,因为这将设置display_errors0。这也可能表明您在服务器上使用 PHP 5.4 或更高版本(A Good Thing ™)。

更长更精确:

正如错误所述,Declaration of EasyBlogTableMediaManager::bind() 必须与类中的原始声明兼容(即相同/匹配)JTableInterface

这告诉我们EasyBlogTableMediaManagerwhich extendsEasyBlogTable作为父类返回到JTable(在 找到/libraries/joomla/table/table.php),其定义为:

abstract class JTable extends JObject implements JObservableInterface, JTableInterface

您会注意到它 implements JTableInterface,这意味着原始JTable->bind()必须与(在 找到)的接口声明匹配,您将看到它在接口文件中定义为:JTableInterface/libraries/joomla/table/interface.php

public function bind($src, $ignore = array());

EasyBlogTableMediaManager当您将其与您提供的课程中的声明进行比较时:

public function bind( $data = array() )
{
    return parent::bind( $data );
}

您可以看到方法签名是不同的(即 EasyBlogbind()方法只定义了一个参数$data)。因此,引用先前链接的接口的 PHP 文档:

注意:实现接口的类必须使用与接口中定义的完全相同的方法签名。不这样做会导致致命错误。

在 Joomla 2.5.x 和 Joomla 3.x 之间,几个方法签名发生了变化,考虑到这是一个主要的版本号变化,这是可以预料的,开发人员可以为每个版本生成单独的扩展构建以避免这个问题,但它确实引入了额外的层支持。

如果您需要错误报告Maximum

您可以通过简单地将方法签名更改为此来修复它:

public function bind( $data = array(), $ignore = array())
{
    return parent::bind( $data );
}

但是,这可能会导致错误进一步向上移动类层次结构,并且如果您更新 EasyBlog 的版本,可能会重新出现(因为您的更改将被覆盖)。最好与EasyBlog 的开发人员一起讨论

于 2015-01-11T02:05:28.320 回答
0

固定的!我使用了以下代码

    public function bind( $data = array(), $ignore = array())
{
    return parent::bind( $data );
}

这给出了违反标准的错误

为了解决这个问题,我需要通过向 EasyBlogTableMediaManager 类添加其他参数来对加载函数的声明进行以下更改 -

public function load($path = '' , $type = '' ,   $keys = null, $reset = true )
于 2015-01-12T08:34:05.220 回答