PHP:从另一个函数调用函数(超出范围?)

时间:2012-07-02 15:39:21

标签: php oop function scope nusoap

我在通过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,如果这有任何帮助

3 个答案:

答案 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)解决了这个问题!

再次感谢!