2012-07-02 1 views
0

У меня проблемы при создании веб-сервисы через NuSOAP (хотя я считаю, что моя проблема не имеет ничего общего с ним)PHP: вызов функции из другой функции (из области видимости?)

Что я пытаюсь делать:

function loadActiveItems() { 
    $list = Item::loadActive(); 
    $ret = array(); 
    foreach ($list as $val){ 
     //two tests to check if i really have an object and if the toDTO method is callable 
     echo var_dump($val); 
     echo is_callable(array($val, 'toDTO')); 
     array_push($ret, $val->toDTO()); 
    } 
    unset($val); 
    return $ret; 
} 

я получаю следующее сообщение об ошибке:

Call to a member function toDTO() on a non-object 

и оба var_dump($val) и is_callable возвращает ожидаемый (объект и верно, соответственно) от КНА на который я увидел в Интернете, кажется, у меня есть проблемы отказа от области действия ... но по какой-то причине я не похоже, чтобы получить мою голову вокруг него: P

Заранее спасибо

EDIT: а просто проверить, что, видимо, я не понимаю, is_callable либо потому, что я всегда получаю 1 как результат ... edit2: я использую PHP-ActiveRecord, если это поможет в любом случае

+2

Вы не должны повторять результат var_dump(). Не могли бы вы опубликовать результат var_dump? – Florent

+1

Является ли 'toDTO' статическим методом? – Greg

+0

Возможно, попробуйте 'foreach ($ list as & $ val) {...} ' –

ответ

0

Итак, я понял, что проблема ... спасибо за помощь! Я звонил в DTO другого объекта внутри toDTO ... проблема заключалась в том, что объект может быть нулевым! Так просто, если (объект == null) решил проблему!

Еще раз спасибо!

0

toDTO() может быть не определено в классе Item.

Другая причина может заключаться в том, что метод не является общедоступным или как @Grep сказал `static.

+0

'public function toDTO() { require_once 'DTO/ItemDTO.php'; return new ItemDTO ($ this-> id, $ this-> name, null, $ this-> itemtype-> name, $ this-> parent-> toDTO()); } ' К сожалению нет =/ – Atekon

+0

Каков результат get_class_methods ($ val)? – Florent

+0

ну, огромный массив: P, но '12 => строка 'toDTO' (длина = 5)' есть – Atekon

0

Эта ошибка никогда не происходит на объекте, который определяет метод, но он является статическим или защищенным/частным:

Call to a member function toDTO() on a non-object 

Этой ошибка происходит только если $val не является объект. Обычно это NULL, FALSE или другой скаляр.

Обычно это ЛОЖЬ, когда объект пришел для функции db_fetch(), но выборка или запрос до его срыва.

Обычно это NULL, когда у вас есть массив, в котором могут быть NULL.

var_dump($list) и посмотрите, что там есть и есть ли какие-либо NULL. Также измените ваш foreach на $ key и var_dump($key), а также посмотрите, какой ключ выгружен последним до выдачи ошибки.

+0

. В списке нет значений NULL, и ошибка возникает при первом элементе ($ key = 0) =/ – Atekon

+0

Какова ценность этого ключа? –

+0

объект '(Item) [25] общественных 'ошибок' => NULL частных атрибутов" (ActiveRecord \ Model) => массива (размер = 5) 'ID' => Int 1 'itemtype_id' => int 1 'parent_id' => null 'name' => string 'item1' (length = 5) 'active' => int 1 private '__dirty' (ActiveRecord \ Model) => array (size = 0) пустого частного '__readonly' (ActiveRecord \ Model) => булева ложь частное '__relationships' (ActiveRecord \ Model) => массива (размер = 0) пустого частного '__new_record' (ActiveRecord \ Model) = > boolean false' – Atekon