我有以下一些想要使它们彼此协作的对象。用户可以在不同的时间创建彼此分离的每个对象。最终用途是用户将所有对象链接在一起以组成最终对象。
Invoice.php
<?php
class Invoice
{
private $header;
private $xml;
public function __construct()
{
// code that initializes $this XML tree (root)
}
public function setInvoiceHeader($invoiceHeader)
{
/* code that should merge $this->xml with the one from the $invoiceHeader param
but I can't access it here because of private visibility and I would like to avoid
the public visibility */
}
public function writeXMLDocument()
{
// code that returns the XML document
}
}
?>
InvoiceHeader.php
<?php
class InvoiceHeader
{
private $xml;
public function __construct()
{
// code that initializes $this XML tree
}
public function setTransmissionData($transmissionData)
{
/* code that should merge $this->xml with the one from the $transmissionData param
but I can't access it here because of private visibility and I would like to avoid
the public visibility */
}
}
?>
TransmissionData.php
<?php
class TransmissionData
{
private $xml;
private $transmissionIdNode;
public function __construct()
{
// code that initializes $this XML tree
}
public function setTransmissionId($idCountry, $idCode)
{
// code that creates the XML node with the params
}
}
?>
我找不到在对象之间传递private
$ xml的方法。
我想避免使用public
可见性,因为我不希望用户可以访问低级实现。
我想避免使用继承和protected
可见性,因为我认为这些对象之间关系不大(InvoiceHeader不是Invoice,而TransmissionData不是InvoiceHeader);而且,他们唯一会继承的是一块田地。这就像我的耳朵一样浪费。
在可能的情况下,我想将它们像某些组件一样对待。
答案 0 :(得分:-1)
您可以让InvoiceHeader持有一个TransmissionData对象(由您当前的set方法设置),并让TransmissionData对象公开一个方法来获取生成的XML,这样您就不必公开原始属性,只需公开所得的XML块?
类似地,Invoice可以拥有Invoice标头对象属性,而InvoiceHeader公开了另一种方法来获取所需的XML,又将属性编辑保留在核心类中,并且仅以消耗性格式公开数据?
如果在任何时候都需要将XML的多个部分放入最终结果的各个位置,则可以为每个必需的块公开许多方法。
我不会在这里尝试输入php代码-我很生锈!