【问题标题】:Class method don't exists (throwing fatal error) - But it exist类方法不存在(抛出致命错误) - 但它存在
【发布时间】:2013-08-29 16:38:26
【问题描述】:

我不知道为什么,但是 PHP 触发了致命错误,因为类方法不存在。 但它显然存在!

left.phtml:

<?php
    $block = Block::getBlock('core/sidebar_modules');
    foreach($block->getSidebar('left') AS $key => $value)
    {
        $_block = explode('_',$value->getName());
        if(isset($_block[1]))
        {
            $_block[1] .= '_widget';
        }
        $loadBlock = Block::getBlock(implode('/',$_block)); // returns instance of Visio_Blog_Block_Recent_Widget
        Debug::var_dump($loadBlock);
        /*
            returns:

            object(Visio_Blog_Block_Recent_Widget)#33 (0) {
            }
        */
        echo $loadBlock->widgetContent();
        /*
            returns:

            Fatal error: Call to a member function widgetContent() on a non-object in E:\docroot\vhosts\zend.local.host\htdocs\app\design\default\templates\left.phtml on line 13
        */

        Debug::print_r(get_class_methods($loadBlock));
        /*
            returns:

            Array
            (
                    [0] => __construct
                    [1] => widgetContent
            )
        */
    }
?>

Widget.php (Visio_Blog_Block_Recent_Widget)

Class Visio_Blog_Block_Recent_Widget
{
    public function __construct()
    {
        return $this;
    }

    public function widgetContent()
    {
        return 'content';
    }

}

我不知道为什么会这样?

这可能是我的视图类在实现嵌套视图模板时出现的错误。

我从头开始构建框架。

【问题讨论】:

  • 能否请您发布 getBlock() 函数?
  • public static function getBlock($block) { $blockName = self::getBlockName($block); if(class_exists($blockName)) { self::$_instances[$blockName] = new $blockName(); return self::$_instances[$blockName]; } return null; }
  • 所以$loadBlockecho $loadBlock-&gt;widgetContent(); 之前不是null
  • 不,它不是 null,直到 var_dump 打印出 Object。
  • 好的,找到问题了。该 foreach 循环中有 2 条数据库记录。第一个不存在,因此会触发该错误。

标签: php oop methods


【解决方案1】:

从错误看来,$loadBlock 不包含 Visio_Blog_Block_Recent_Widget 的实例或任何类。

所以问题在于分配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2012-01-24
    • 2015-11-27
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多