Объекты передаются по ссылке по умолчанию. Нет причин передавать или присваивать $parent
по ссылке. Так что этого должно быть достаточно:
abstract class MainClass {
function __construct($parent){
$this->parent = $parent;
$this->init();
}
Для вас может быть важно использовать &$parent
, но это совершенно не нужно.
Относительно рекурсии: в вашем коде нет рекурсии, это рекурсия в выводе .
Эта часть:
object(ChildClass)#3 (1) { // <--- the same element
["parent"]=>
object(ParentClass)#1 (2) {
["parent"]=>
object(stdClass)#2 (0) {
}
["child"]=>
object(ChildClass)#3 (1) { // <--- the same element
["parent"]=>
*RECURSION*
}
}
}
будет печататься снова и снова, потому что дочерний элемент имеет ссылку на своего родителя, а родительский элемент - на своего дочернего элемента.
Возможно, еще более очевидны повторяющиеся числа в выводе:
object(ParentClass)#1 // 1
object(stdClass)#2 // 2
object(ChildClass)#3 // 3
object(ParentClass)#1 // 1
object(stdClass)#2 // 2
object(ChildClass)#3 // 3
// what would be here? right, object(ParentClass)#1 again
Это нормально, проблем нет.