如何避免"试图获取非对象属性"通知



我正在尝试循环从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有关 - 答案可能是肯定的,您应该使用它来确定您需要什么。在确定某物是否为有效值时,请注意issetempty之间的差异。

您是否尝试过用isset包装代码?你得到了什么结果,它是否满足了你的需求?

最新更新