我正在尝试循环从eBay下载多行订单。如果不是大多数订单的多行订单,我会得到:
PHP 注意:尝试获取非对象的属性...。605路
这是我的代码:
for ( $counter = 0; $counter <= $n_ord; $counter += 1) {
$multi=0;
if (!is_object($retxml->OrderArray[0]->Order[$counter]->TransactionArray->Transaction[$multi]->OrderLineItemID)) {
$OrderLinetest = '';
} else {
$OrderLinetest = $retxml->OrderArray[0]->Order[$counter]->TransactionArray->Transaction[$multi]->OrderLineItemID;
}
while ($OrderLinetest<>''){
//:
//Process the order
//:
$multi++; //line 604:
if (!is_object($retxml->OrderArray[0]->Order[$counter]->TransactionArray->Transaction[$multi]->OrderLineItemID)) {
$OrderLinetest = ''; //line 605:
} else {
$OrderLinetest = $retxml->OrderArray[0]->Order[$counter]->TransactionArray->Transaction[$multi]->OrderLineItemID;
}
} // end multi item while loop
} // end for loop of items
测试它是否是对象的最佳方法是什么?
我应该使用isset
吗?
PHP 实际上内置了一个名为 is_object 的函数,用于确定某些东西是否是你已经在使用的对象。
您的问题是您正在检查这是否是一个对象:
$retxml->OrderArray[0]->Order[$counter]->TransactionArray->Transaction[$multi]->OrderLineItemID
但是,如果未设置以下条件之一怎么办?
-
$retxml->OrderArray[0]->Order[$counter]->TransactionArray->Transaction[$multi]
-
$retxml->OrderArray[0]->Order[$counter]->TransactionArray
-
$retxml->OrderArray[0]->Order[$counter]
-
$retxml->OrderArray[0]
-
$retxml
不幸的是,您有许多级别的 fof 数据,并且只检查最深的数据。
根据您最初的问题,与使用isset
有关 - 答案可能是肯定的,您应该使用它来确定您需要什么。在确定某物是否为有效值时,请注意isset
和empty
之间的差异。
您是否尝试过用isset
包装代码?你得到了什么结果,它是否满足了你的需求?