PHP:从另一个函数调用函数(超出范围?)
我在通过nuSOAP创建Web服务时遇到问题(尽管我相信我的问题与此无关) 我想做的是:PHP:从另一个函数调用函数(超出范围?),php,oop,function,scope,nusoap,Php,Oop,Function,Scope,Nusoap,我在通过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
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\u dump($val)
和is\u callable
都返回了我在网上看到的预期值(对象和true),似乎我有一个超出范围的问题。。。但出于某种原因,我似乎没有意识到这一点:P
提前谢谢
编辑:那就检查一下,显然我也不明白是不是可以调用,因为我总是得到1作为结果。。。
EDIT2:我正在使用php-activerecord,如果这有任何帮助的话toDTO()
可能在您的类项中未定义
另一个原因可能是该方法不是公共的,或者正如@Grep所说的“静态的”。此错误不会发生在定义该方法的对象上,但它是静态的或受保护的/私有的:
Call to a member function toDTO() on a non-object
只有当$val
不是对象时,才会发生该错误。通常为NULL、FALSE或其他标量
当对象用于db\u fetch()
函数时,通常为FALSE,但在该函数失败之前获取或查询失败
当数组中可能有空值时,它通常是空值
var\u dump($list)
查看其中的内容以及是否有空值。还可以将您的foreach更改为具有$key和var\u dump($key)
以及查看在发出错误之前最后转储的键。好的,所以我解决了问题。。。谢谢你的帮助!
我在调用toDTO中另一个对象的toDTO。。。问题是对象可能是空的!
因此,一个简单的if(object==null)解决了这个问题
再次感谢 您不应该回显var_dump()的结果。您可以发布var_转储的结果吗?可以尝试foreach($list as&$val){…}
@Florentobject(Item)[25]public'errors'=>null private'attributes'(ActiveRecord\Model)=>array(size=5)'id'=>int 1'itemtype_id'=>int 1'parent\u id'=>null'name'=>string'item1'(长度=5)“active'=>int 1 private'\uu dirty'(ActiveRecord\Model)=>array(size=0)empty private'\uu readonly'(ActiveRecord\Model)=>boolean false private'\uu关系(ActiveRecord\Model)=>array(size=0)empty private'\uu new record'(ActiveRecord\Model)=>boolean false
@Greg nope。。。它不是静态的=(公共函数toDTO(){require_once'DTO/ItemDTO.php';返回新的ItemDTO($this->id,$this->name,null,$this->itemtype->name,$this->parent->toDTO());}@TomIngram也不起作用=/无论如何谢谢!`公共函数toDTO(){require_once'DTO/ItemDTO.php';返回新的ItemDTO($this->id,$this->name,null,$this->itemtype->name,$this->parent->toDTO());}不幸的是否=/get_class_方法($val)的结果是什么?一个巨大的数组:P但是12=>string'toDTO'(长度=5)
是否有我的问题可能很愚蠢,但是,你确定所有$val都不是空的吗?按照Mihau Stancu的建议进行检查,没有任何空值=/list没有任何空值,错误发生在第一项($key=0)=/该项上的值是多少?对象(项)[25]公共“错误”=>null private“属性”(ActiveRecord\Model)=>array(大小=5)'id'=>int 1'itemtype\u id'=>int 1'parent\u id'=>null'name'=>string'item1'(长度=5)'active'=>int 1 private'\u dirty'(ActiveRecord\Model)=>array(大小=0)空private'\u readonly'(ActiveRecord\Model)=>布尔值假私有“\uuu关系”(ActiveRecord\Model)=>数组(大小=0)空私有“\uu新记录”(ActiveRecord\Model)=>boolean false
为错误打印a。可能错误不是来自该对象本身,而是来自堆栈中的函数调用。嗯,我不是php专家,所以我尝试读取调试回溯(这是一个巨大的XD),我没有看到$val变量的引用,根据我发现的我应该有,对吗?