Как управлять сложными зависимостями классов в PHP? - PullRequest
1 голос
/ 15 марта 2019

Я пишу PHP-скрипт, который генерирует планы SVG для всех компонентов, которые составляют автомат для пинбола, для отправки на лазерный резак.Есть много десятков компонентов.Каждый из них определен в отдельном файле класса, что-то вроде этого:

class CabinetFrontComponent extends Component {

    public $width;
    public $height;

    function __construct() 
    {
      /* 
       * Geometry of each component is calculated in its constructor. For 
       * the sake of simplifying this example, I'll just set these two
       * properties to a numeric value.
       */
      $this->width = 150;
      $this->height = 150; 
    }

    function draw()
    {
      // Draws the component and writes an SVG file to disk    
    }

  }

Все компоненты загружаются и отрисовываются так:

foreach (glob(__DIR__ . "/components/*.php") as $filename) {
  require_once($filename);
}

foreach( get_declared_classes() as $class ){
  if( is_subclass_of( $class, 'Component' ) ) {
    $obj = new $class;
    $obj->draw();
  }
}

Проблема в том, что геометрия некоторых компонентовне может быть рассчитан, пока не будет рассчитан другой компонент.Например, размеры CabinetSidesComponent не могут быть рассчитаны до тех пор, пока мы не узнаем размеры PlayfieldComponent, а этот компонент не может быть рассчитан до тех пор, пока мы не узнаем размеры BumperComponent.

Есть ли способ, которым я могу сказать PHPинстанцировать их в правильном порядке, чтобы все необходимые зависимости были выполнены?Я имею в виду, если не указать вручную порядок их загрузки?

Кроме того, как только компоненты были созданы, как лучше всего сделать их свойства доступными из других объектов?

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