"试图获得非对象的属性"在SOAP PHP中 - 不确定为什么会出现此错误

时间:2015-08-19 19:28:57

标签: php soap

希望你们能帮助我......还是PHP的新手,我正在努力展示这个Object / Array结果集的部分内容。 我从SOAP Web服务返回以下结果$results

`object(stdClass)[9]
      public 'Summary' => 
          object(stdClass)[2]
                 public 'ID' => string '1096408402' (length=10)
                 public 'IKey' => string '1440010962' (length=10)
      public 'Address' => 
          object(stdClass)[4]
  public 'Forename' => string 'TEST' (length=4)
  public 'Surname' => string 'TESTER' (length=6)
  public 'DOB' => string '0000-00-00' (length=10)
  public 'Telephone' => string 'Unavailable' (length=11)
  public 'Occupants' => 
    array (size=3)
      0 => 
        object(stdClass)[12]
          ...
      1 => 
        object(stdClass)[13]
          ...
      2 => 
        object(stdClass)[14]
          ...
      3 => 
        object(stdClass)[15]
          ...

现在我试图将数据放入表格格式。

我已成功使用标记为foreach的部分Occupants创建表格。我通过调用Occupants执行此操作,如下所示:     $occupants = ($results->Address->Occupants);并使用我的代码将数据提取并填充到我的表中(对于此问题不相关)。

我现在的问题是,当我尝试为SummaryAddress执行相同操作时,它不起作用:我收到错误" 尝试获取非对象的属性"

我尝试了$summary = $results->Summary$summary = $results['Summary'],但都没有效果。

我当时想做的就是跑步 <?php $summary = ($results->Summary);foreach($summary as $person):?> 然后我将它插入我的表中,如下所示: <td><?=$person->ID?></td>

所以我知道为什么会出现这个错误?我认为它不在foreach方面......?

1 个答案:

答案 0 :(得分:1)

通常,您应该使用以下内容获取“摘要”对象:

$summary = $results->Summary

在这种情况下,$summary是一个具有2个属性的对象:“ID”和“IKey”。 如果您使用$summary迭代foreach,则$person的值在第一次循环迭代中的值为$summary->ID,在$summary->IKey中的值为$summary->ID第二次循环迭代。 $summary->IKey$summary = $results->Summary; foreach ($summary as $value) echo "<td>$value</td>"; 都是字符串,因此是非对象,因此我认为这就是您收到错误的原因。 我想你想要这样做:

<td>1096408402</td><td>1440010962</td>

这应该输出(对于给定的例子):

SELECT 
    permit_id, 
    SUM(poc_emissions) AS POC_emissions, 
    SUM(non_poc_emissions) AS NON_POC_emissions
FROM 
    ( .... SUBQUERY ...) main
GROUP BY 
    permit_id

有关对象迭代的更多信息,我建议:http://php.net/manual/en/language.oop5.iterations.php