Я пишу 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инстанцировать их в правильном порядке, чтобы все необходимые зависимости были выполнены?Я имею в виду, если не указать вручную порядок их загрузки?
Кроме того, как только компоненты были созданы, как лучше всего сделать их свойства доступными из других объектов?