我正在一個非常廣泛的肥皂客戶端,並希望使用對象爲我的所有數據。我需要製作這樣的事情:肥皂變量在php與對象和重複標籤
<Animals>
<Cat>
<Name>Bob</Name>
</Cat>
<Cat>
<Name>Peter</Name>
</Cat>
<Dog>
<Name>Rex</Name>
</Dog>
</Animals>
所以我的動物對象會是這個樣子與狗相同的代碼,以及:(每個「貓」將是一個簡單的屬性名稱的對象)
<?php
use ArrayObject;
class Animals {
public function __construct(){
$this->Cat = new ArrayObject();
}
/**
* Cat
* @var \ArrayObject
*/
protected $Cat;
/**
* Adds a Cat
* @param \SoapVar $cat
*/
public function addCat(\SoapVar $cat) {
$this->Cat->append($cat);
return $this;
}
問題是,這不會產生我想要的結果。結果看起來像這樣。
<Animals>
<Cat>
<Cat>
<Name>Bob</Name>
</Cat>
<Cat>
<Name>Peter</Name>
</Cat>
</Cat>
<Dog>
<Dog>
<Name>Rex</Name>
</Dog>
</Dog>
</Animals>
SoapVar和SOAP_ENC_OBJECT似乎爲對象中的每個屬性都創建一個標記。這創建了我不想要的額外標籤。有什麼方法可以在主對象內部創建重複標籤嗎?將動物改爲ArrayObject對於我的面向對象體系結構是不可接受的。
編輯: 我找到了一個新的可能的解決方案。如果我添加一個迭代器到我的類,正確地通過我的屬性並使用SOAP_ENC_ARRAY編碼對象。它創建我想要的適當的xml結構。現在的問題是說,每個標籤被稱爲<xsd:anyType>
我看來,像它做你要求它做什麼。無論是將單個'$貓'直接附加到'動物'上,還是讓外部物品成爲'貓'而不是'貓',這樣才更有意義。 –
@PatrickQ如何將單個'$ cat's直接附加到'Animal'對象?這將完全解決我的問題 – Simon
你能提供一些更多的代碼來使這種可重複性?此外,您正在爲'$ this-> Cat'屬性追加'$ cat'對象。只是一個猜測,但你有沒有嘗試將它附加到'$ this'? IE瀏覽器。 '$ this-> append($ cat);' – waterloomatt