0

我在通过 nuSOAP 创建 Web 服务时遇到问题(尽管我相信我的问题与它无关)

我正在尝试做的事情:

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 作为结果... EDIT2:如果这有任何帮助,我正在使用 php-activerecord

4

3 回答 3

0

toDTO()可能在您的课程中未定义Item

另一个原因可能是该方法不是公共的,或者如@Grep 所说的那样是静态的。

于 2012-07-02T15:51:58.780 回答
0

此错误永远不会发生在定义该方法的对象上,但它是静态或受保护/私有的:

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

仅当$val不是对象时才会发生该错误。通常是 NULL、FALSE 或其他标量。

当对象为db_fetch()函数而来但在它之前的获取或查询失败时,通常为 FALSE。

当您有一个可能包含 NULL 的数组时,它通常是 NULL。

var_dump($list) 看看里面有什么,是否有空值。还将您的 foreach 更改为具有 $key 并var_dump($key)查看在发出错误之前最后转储了哪个密钥。

于 2012-07-02T16:02:55.203 回答
0

好的,所以我发现了问题...感谢所有帮助!我在 toDTO 中调用另一个对象的 toDTO ...问题是该对象可能为空!所以一个简单的 if(object==null) 解决了这个问题!

再次感谢!

于 2012-07-09T11:33:52.633 回答