目前我正在开发一个解析器,它由一个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>
这两者之间有什么不同吗?