【发布时间】: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; } -
所以
$loadBlock在echo $loadBlock->widgetContent();之前不是null -
不,它不是 null,直到 var_dump 打印出 Object。
-
好的,找到问题了。该 foreach 循环中有 2 条数据库记录。第一个不存在,因此会触发该错误。