如何在PHP中管理复杂的类依赖关系?

时间:2019-03-14 23:59:42

标签: php oop object

我正在编写一个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();
  }
}

问题在于某些组件的几何形状无法计算,除非先计算出另一个组件。例如,在我们知道PlayfieldComponent尺寸之前,不能计算CabinetSidesComponent的尺寸,而在我们知道BumperComponent尺寸之前,不能计算该组件。

是否有某种方法可以告诉PHP以正确的顺序实例化它们,以便满足所有必要的依赖关系?我的意思是,除了手动指定加载它们的顺序之外?

此外,一旦实例化了组件,使它们的属性可从其他对象访问的最佳方法是什么?

0 个答案:

没有答案