不要:)它更可能是您的XML是一個或多個對象的序列化。
因此,在您的軟件中,您不會傳遞XML對象,但只有在序列化或反序列化對象時才使用它。
然後你傳遞可能是具體類型的對象。
所以讓我們把你的問題從頭到尾。當你想要一個具體的類型時,爲什麼要關心XML。假設你想擁有一輛或多輛汽車,那麼讓我們來創建它們!
/**
* Class Car
*/
class Car
{
private $model;
private $color;
/**
* Car constructor.
*
* @param $model
* @param $color
*/
public function __construct($model, $color)
{
$this->model = $model;
$this->color = $color;
}
/**
* @return mixed
*/
public function getColor()
{
return $this->color;
}
/**
* @return mixed
*/
public function getModel()
{
return $this->model;
}
}
現在很簡單。而正確的,這裏有雲:
$car = new Car('Sahara', 'Blue');
的IntelliJ-IDEA已經將正確的類型提示的$car
變量。
但是等等,你不是問XML嗎?那麼,真的是這樣。好的,我們再來一次。當我們需要它們時,讓我們假裝事物已經存在。例如打開XML轉換的汽車秒的數組:
$buffer = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<car>
<model>Volvo</model>
<color>red</color>
</car>
<car>
<model>BMW</model>
<color>black</color>
</car>
</root>
XML;
$xml = new SimpleXMLElement($buffer);
$carsArray = new CarsArray();
$cars = $carsArray->fromXml($xml);
現在又是容易的。當然,問題仍然是什麼現在CarsArray?好吧,讓我們說這是某種概念到的SimpleXMLElement翻譯成汽車秒的陣列,反之亦然:
/**
* Class CarsArray
*/
class CarsArray
{
/**
* @param array $cars
*
* @return SimpleXMLElement
*/
public function toXml(array $cars)
{
$xml = new SimpleXMLElement('<root/>');
foreach ($cars as $car) {
if ($car instanceof Car) {
$node = $xml->addChild('car');
$node->addChild('color', $car->getColor());
$node->addChild('model', $car->getModel());
}
}
return $xml;
}
/**
* @param SimpleXMLElement $xml
*
* @return array|Car[]
*/
public function fromXml(SimpleXMLElement $xml)
{
$array = [];
foreach ($xml->car as $car) {
$array[] = new Car($car->model, $car->color);
}
return $array;
}
}
正如你所看到的,這是沒有什麼很花哨。並且已經是一個工作示例。這裏是它的最後一部分:
foreach ($cars as $car) {
echo "- ", $car->getModel(), "\n";
}
做以下的輸出:
- Volvo
- BMW
要從VARTYPE這裏暗示的利潤,這是你暗示與數組返回值的類型是很重要的。讓我們再看看進入fromXml()
方法:
/**
* @param SimpleXMLElement $xml
*
* @return array|Car[]
*/
public function fromXml(SimpleXMLElement $xml)
{
$array = [];
...
正如你可以看到@return array|Car[]
告訴返回值是一個陣列也(因此管道「|」)的陣列汽車 S的,由它後面的方括號對錶示(代表陣列)。
* @return array|Car[]
這會再次給你代碼補全。不僅如此,在大部分應用程序中,您都知道如何處理對象,並且這些對象獨立於XML,並且XML和汽車之間的關係只針對您的程序中需要翻譯/兩者之間的轉換/映射。
我希望這會有所幫助。
您可以在這裏找到代碼以及在線交互示例:https://eval.in/439670