PHP 使用变量创建 object 以指向正确的 class

PHP creating an object using a variable to point to the correct class

抱歉不是最好的标题。 我正在构建一个包含许多不同 class 的应用程序,它将由文档生成器 class 调用,该应用程序采用定义为段的数组,然后用于引用段 class然后将其构建到文档中。我提供了文档 class 和引用哪个段指向哪个文件位置的 SegmentConfig 文件。

先参考下面

我找不到关于如何使用它来生成片段的明确答案 object 我可以像 use $segmentObjectLocation 那样做吗,因为它等于 'Edi\Segments\AmtSegment' 这样的东西。如果有人有见识。

其他信息:我尝试这样做的原因是因为这将在整个应用程序的多个地方使用。

$segmentLocation = include('SegmentConfig.php');
class Document{
    public function __construct($structure){
           $this -> documentStructure = $structure;
           foreach($structure as $segment){
                   buildSegment($segment);
          }
    }

    public function buildSegment($segment){
           $segmentObjectLocation = $segmentLocation ->{$segment};   
       }

} 
<?php
namespace Edi;

SegmentConfig.php

return (object) array(
       'AMT' => 'Edi\Segments\AmtSegment',
       'B4' => 'Edi\Segments\B4Segment',
       'BEG' => 'Edi\Segments\BegSegment',
       'CTT' => 'Edi\Segments\CttSegment',
       'DTM' => 'Edi\Segments\DtmSegment',
       'FOB' => 'Edi\Segments\FobSegment',
       'GE' => 'Edi\Segments\GeSegment',
       'GS' => 'Edi\Segments\GsSegment',
       'IEA' => 'Edi\Segments\IeaSegment',
       'ISA' => 'Edi\Segments\IsaSegment',
       'MSG' => 'Edi\Segments\MsgSegment',
       'N1' => 'Edi\Segments\N1Segment',
       'N2' => 'Edi\Segments\N2Segment',
       'N3' => 'Edi\Segments\N3Segment',
       'N4' => 'Edi\Segments\N4Segment',
       'N9' => 'Edi\Segments\N9Segment',
       'PER' => 'Edi\Segments\PerSegment',
       'PID' => 'Edi\Segments\PidSegment',
       'PO1' => 'Edi\Segments\Po1Segment',
       'Q2' => 'Edi\Segments\Q2Segment',
       'R4' => 'Edi\Segments\R4Segment',
       'REF' => 'Edi\Segments\RefSegment',
       'SAC' => 'Edi\Segments\SacSegment',
       'SE' => 'Edi\Segments\SeSegment',
       'ST' => 'Edi\Segments\StSegment',
       'TC2' => 'Edi\Segments\Tc2Segment',
       'TD1' => 'Edi\Segments\Td1Segment',
       'TD4' => 'Edi\Segments\Td4Segment',
       'TD5' => 'Edi\Segments\Td5Segment',
)

并不是说这听起来是个特别棒的主意,但是:

class Foo {}
$n = 'Foo';
$f = new $n();
var_dump($f);

输出:

object(Foo)#1 (0) {
}