我正在编写一个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以正确的顺序实例化它们,以便满足所有必要的依赖关系?我的意思是,除了手动指定加载它们的顺序之外?
此外,一旦实例化了组件,使它们的属性可从其他对象访问的最佳方法是什么?