我在通过nuSOAP创建webservices时遇到问题(虽然我认为我的问题与它无关)
我正在尝试做什么:
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
提前致谢
编辑:好吧,检查一下,显然我不理解is_callable,因为我总是得到1作为结果... 编辑2:我正在使用php-activerecord,如果这有任何帮助
答案 0 :(得分:0)
toDTO()
中可能未定义 Item
。
另一个原因可能是该方法不公开,或者@Grep称为静态。
答案 1 :(得分:0)
此错误永远不会发生在定义方法的对象上,但它是静态的或受保护的/私有的:
Call to a member function toDTO() on a non-object
仅当$val
不是对象时才会发生该错误。通常为NULL,FALSE或其他标量。
当对象来到db_fetch()
函数但是获取或查询失败之前,它通常为FALSE。
当你的数组中可能包含NULL时,它通常为NULL。
var_dump($list)
并查看其中的内容以及是否存在任何NULL。同时更改foreach以获得$ key和var_dump($key)
,以便在发出错误之前查看最后转储的密钥。
答案 2 :(得分:0)
好的,所以我想出了问题...感谢所有的帮助! 我在toDTO里面调用另一个对象的DTO ...问题是该对象可能是null! 所以一个简单的if(object == null)解决了这个问题!
再次感谢!