php вызов функции-члена для необъекта - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть этот код:

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, поэтому не смог найти решение о том, как справиться с ошибкой.

Любая помощь будет принята с благодарностью! :)

Mauro

Ответы [ 4 ]

1 голос
/ 15 апреля 2011

Скорее всего, он не возвращает объект, если ничего не найдено.

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

Редактировать: рекомендация из комментария.

1 голос
/ 15 апреля 2011

Это означает, что $block не является объектом, возможно, в некоторых случаях это NULL или false (ничего не найдено).

0 голосов
/ 15 апреля 2011

Попробуйте проверить результат $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();
}
?>
0 голосов
/ 15 апреля 2011

Если ваш findById ничего не возвращает, то $ block не является объектом. И вы не можете вызывать членов (getBnam()) из чего-то, что не является объектом. Отсюда и ошибка.

Возможно, вы захотите добавить какой-нибудь код, чтобы перехватить событие, когда вы ничего не возвращаете.

как:

function getBlockName($blockId){
    $block = classContent::findById(conn(), $blockId);
    if(!$block){
       echo 'error!;
    }else{
        echo $block->getBname();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...