Здраствуйте, вот проблема. Есть два класса допустим А и B. В конструкторе класса А я создаю экземпляр класса B, в классе B создаю экземпляр класса А, получаются как бы перекрестные ссылки. Не работает, интерпретатор не компилирует. Так вот вопрос как мне сделать так, чтобы я мог вызывать методы и свойства обоих классов, в каждом классе? Можно сделать основной класс, допустим класс С в его конструкторе прописать экземплярв обоих классов, и наследовать его. Но это промежуточный класс, типа прокладки, можно ли обойтись без него?
Вместо того, чтобы делать Код (PHP): class A { private $B; function __construct() { $this->B = new B; } } class B { private $A; function __construct() { $this->A = new A; } } надо делать Код (PHP): class A { private $B; function __construct() { $this->B = new B($this); } } class B { private $A; function __construct($A) { $this->A = $A; } }
( php не строгий язык ему не важно что пишем =) Так, что лучше наверное будет так тогда делать. Код (PHP): class p { public static function p1() { return'p1'; } } class a extends p { public static function p1() { return p::p1().' - a:p1()'; } public static function a1() { return'a1'; } public static function a2() { return'a2'; } public static function a3() { return'a3'; } public function ac() { return'ac'; } } class c extends a { public static function c1() { return self::a1().' '.self::a2().' '.self::a3().' '.self::p1().' '.c::o()->r(); } public static function o() { return new c(); } public function r() { return'r'; } } echo nl2br(c::c1().' '.c::a2().' '.c::a3().' '.c::p1().' '.c::o()->r().' '.c::o()->ac()); a1 a2 a3 p1 - a1() r a2 a3 p1 - a1() r ac
В PHP нет конструктора класса. То, что вы называете конструктором (__construct) - на самом деле инициализатор.
Так и это инициализатор. В отличии от других языков, где конструктор вызывается, когда создается объект класса, в php метод-конструктор вызывается уже после того, как создан объект, и занимается он инициализацией.
хотя и тут есть ньюанс: Код (PHP): public function a($a) { } PHP >= 5.3.3 это уже будет обычный метод. Ты чем вообще читаешь материал? Так, что это правильно будет метод-конструктор, а не инициализатор Но используется для инициализации какого-либо состояния объекта перед его использованием.