通过引用传递或不传递链接到其他实例

时间:2016-06-16 00:24:09

标签: php constructor instance pass-by-reference

目前我正在开发一个解析器,它由一个Document类组成,它接受输入并确定要采取的一些处理步骤。每个步骤的逻辑对于各种情况都是动态的,因此传递给Processor类,该类在构造时传递给Document

我的目标是使用它最终看起来像:

$document = new Document($input, Processors\XYZ::class);
$document->parse();
$document->output();

Document->__construct()还在属性中创建并存储传递的处理器类的新实例。这导致了我不确定的部分:Processor实例还需要一个返回Document的链接。我不确定我是否应该通过引用传递它。我没有发现任何关于引用的特定用法 - http://php.net/manual/en/language.references.pass.php只是真正讨论函数,与类或实例无关。

我把这个最小的测试汇总在一起:

class base {
    //function __construct($maker) {
    function __construct(&$maker) {
        if (!is_a($maker, makeSay::class, true)) { echo 'oh no!<br/>';}
        $this->maker = $maker;
    }
    function say() {echo 'Base, made by ' . $this->maker->name;}    
}

class child extends base {
    function say() {echo 'Child, made by ' . $this->maker->name;}
}

class makeSay {
    public $name = 'default';
    function __construct($thing, $name) {
        if (!is_a($thing, base::class, true)) { echo 'oh no!<br/>';}
        $this->thing = new $thing($this);
        $this->name = $name;
    }

    function say() {$this->thing->say();}
}

$a = new makeSay(child::class, 'This Guy');

$a->say();

...它与我的真实脚本中的构造函数具有相似的逻辑,但似乎base->__construct()看起来像function __construct(&$maker)function __construct($maker),执行没有区别。< / p>

这两者之间有什么不同吗?

0 个答案:

没有答案