2011-04-15 55 views
0

我有这样的代码:PHP调用,非对象的成员函数

function getBlockName($blockId){ 
    $block = classContent::findById(conn(), $blockId); 
    echo $block->getBname(); 
} 

现在如果函数输出的东西能正常工作,如果它不输出任何东西我有

Fatal error: Call to a member function getBname() on a non-object in... 

我很新的PHP,所以我找不到解决方案如何处理错误。

任何帮助将非常感谢! :)

莫罗

+0

它意味着'classContent :: findById'不返回一个对象。也许是因为你传递了一个不存在的'$ blockId'。 – 2011-04-15 09:03:44

+0

在提问之前,你看过http://stackoverflow.com/search?q=Call+to+a+member+function+on+a+non-object *吗? – Gordon 2011-04-15 09:15:06

回答

1

如果没有找到,最有可能它不会返回一个对象。

function getBlockName($blockId){ 
    $block = classContent::findById(conn(), $blockId); 
    if ($block !== false && is_object($block)) { 
     echo $block->getBname(); 
    } 
} 

编辑:来自评论的推荐。

+0

切勿将empty()用于这类事情。检查是否为false或使用is_null/is_object。 – halfdan 2011-04-15 09:05:15

1

这意味着$block不是对象,可能是它在某些情况下NULLfalse(没有找到)。

0

如果你的findById没有返回任何东西,那么$ block不是一个对象。而且你不能从不是对象的东西中调用成员(getBnam())。因此错误。

您可能想要添加一些代码来捕捉不返回任何事件。

,如:

function getBlockName($blockId){ 
    $block = classContent::findById(conn(), $blockId); 
    if(!$block){ 
     echo 'error!; 
    }else{ 
     echo $block->getBname(); 
    } 
} 
0

$block结果都不妨一试。在大多数情况下,你会这样做:

<?php 
function getBlockName($blockId){ 
    $block = classContent::findById(conn(), $blockId); 
    if($block)echo $block->getBname(); 
} 
?> 

但是我对findById返回的结果有点不确定。所以这里有一些必然的工作:

<?php 
function getBlockName($blockId){ 
    $block = classContent::findById(conn(), $blockId); 
    if(method_exists($block,'getBname'))echo $block->getBname(); 
} 
?> 
相关问题