首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >致命错误: EasyBlogTableMediaManager::bind()的声明必须与JTableInterface::bind()的声明兼容

致命错误: EasyBlogTableMediaManager::bind()的声明必须与JTableInterface::bind()的声明兼容
EN

Stack Overflow用户
提问于 2015-01-08 12:56:53
回答 2查看 1.4K关注 0票数 0

我对easyblog有个问题。当我试图通过后端打开博客条目时,我会得到以下错误:

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

我正在运行Joomla 3.2.5,错误报告设置为“最大值”。你知道这会有什么问题吗?

这是发生错误的文件。

代码语言:javascript
复制
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 );
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-11 02:05:28

TLDR

是的,我认为出现错误是因为错误报告设置为最大,这可能是在强制使用STRICT模式,如果您将级别设置为None,它应该工作得很好,因为这会将display_errors设置为。这也可能是您在服务器上使用PHP5.4或更高版本(A ™)的一个指示。

更长更精确:

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

这告诉我们,扩展EasyBlogTableMediaManagerEasyBlogTable作为父类返回到JTable (在/libraries/joomla/table/table.php中找到),该类被定义为:

代码语言:javascript
复制
abstract class JTable extends JObject implements JObservableInterface, JTableInterface

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

代码语言:javascript
复制
public function bind($src, $ignore = array());

当您将其与EasyBlogTableMediaManager类中的声明进行比较时,您提供了:

代码语言:javascript
复制
public function bind( $data = array() )
{
    return parent::bind( $data );
}

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

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

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

如果您需要在Maximum上报告错误

只需将方法签名更改为以下内容,您就可以修复它:

代码语言:javascript
复制
public function bind( $data = array(), $ignore = array())
{
    return parent::bind( $data );
}

但是,这可能会导致错误在类层次结构上进一步移动,并且如果您更新EasyBlog版本(因为您的更改将被重写),很可能会重新出现。最好还是和EasyBlog开发人员一起谈吧。

票数 0
EN

Stack Overflow用户

发布于 2015-01-12 08:34:05

修好了!我使用了以下代码

代码语言:javascript
复制
    public function bind( $data = array(), $ignore = array())
{
    return parent::bind( $data );
}

给出了一个违反标准错误

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

代码语言:javascript
复制
public function load($path = '' , $type = '' ,   $keys = null, $reset = true )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27840702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档