Передача частной собственности между объектами разного типа - PullRequest
0 голосов
/ 25 октября 2018

У меня есть следующие объекты, которые я хотел бы заставить их взаимодействовать между собой.Пользователь может создавать каждый объект отдельно от других и в разное время.Последнее использование состоит в том, что пользователь связывает все объекты вместе, чтобы составить окончательный.

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);кроме того, единственное, что они могли бы унаследовать, это поле ... это как пустая трата для моих ушей.

Я хотел бы относиться к ним больше как к некоторым компонентам, предполагая, что это возможно.

1 Ответ

0 голосов
/ 25 октября 2018

InvoiceHeader может содержать объект TransmissionData (установленный текущим методом set), а объект TransmissionData предоставляет метод для получения сгенерированного XML, так что вам не нужно предоставлять необработанные свойства, только результирующий блок XML?

Аналогичным образом Invoice может содержать свойство объекта заголовка Invoice, а InvoiceHeader предоставляет другой метод для получения требуемого XML, снова сохраняя редактирование свойства в базовом классе и предоставляя данные только в формате расходных материалов?

Если в какой-то момент требуется несколько разделов XML для размещения в разных местах в конечном результате, вы можете использовать несколько методов для каждого требуемого блока.

Я не буду пытаться вводить phpкод здесь - я ржавый!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...