Обращение к объекту
Код:
class A {...}
class B {...}
$ObjA = new A;
$ObjA->ObjB = new B;
class B {...}
$ObjA = new A;
$ObjA->ObjB = new B;
Как методам объекта $ObjB обратиться к методам и свойствам объекта $ObjA? Может существует конструкция наподобие parent?
Не уверен что Ты не знаешь о наследование классов в РНР, но мне кажется, что вопрос именно по этой части.
Код:
class A {
val1 = "";
val2 = "";
function getval1A(){
return val1;
}
}
class B extends A {
function getval1_from_A(){
return $this->getval1A();
}
}
val1 = "";
val2 = "";
function getval1A(){
return val1;
}
}
class B extends A {
function getval1_from_A(){
return $this->getval1A();
}
}
Ну или мануал по РНР. Там есть все по классам.
Прежде чем отвечать обычно надо прочитать вопрос - там нет ни слова о наследовании. Там вопрос о том как подняться выше и получить доступ к объекту содержащему данный объект.
Не знаю, можноли тут давать снова подобные советы. но вот по этому линку в примерах все написано. И данная конструкция подходит для подъема наверх.
http://ee.php.net/manual/en/ref.classobj.php[/QUOTE]
Дла классов... Но не для двух объектов производных разных классов. Смотри какой пример я привел в своем вопросе.
Линку эту уже читал - там ничего нет.
[QUOTE=cyber_punk]Не знаю, можноли тут давать снова подобные советы. но вот по этому линку в примерах все написано. И данная конструкция подходит для подъема наверх.
Дла классов... Но не для двух объектов производных разных классов. Смотри какой пример я привел в своем вопросе.
Линку эту уже читал - там ничего нет.
---
Просмотрел топики ниже и нашел вот это http://forum.codenet.ru/showthread.php?t=29182
разве это не тоже самое?
Было 3 класса. config.class.php (настройки), db.class.php(операции с БД) и остальные (news, catalog etc...), так вот, мне нужно было найти в классах множественное наследование, но его там просто небыло. Тогда я config определил как static. Тебе он не подойдёт?
Сделайте базовый класс и наследуйте оба класса от него так, что бы сохранялись ссылки и были предоставлены методы для пользования этим добром.
Другой вариант, вы можете просто в классе A держать линк на экземпляр класса B, а в B держать линк на экземпляр класса A.
Код:
class A{
private $bObj;
private $buff;
function setBObj(B &$obj){
$this->bObj=$obj;
}
function somePrint($str){
$this->buff=$str;
echo "Hello from A: $this->buff\n";
if($this->bObj instanceof B){
$this->bObj->someElsePrint("It's from A too");
}
}
}
class B{
private $aObj;
private $counter;
function __construct(){
$this->counter = 0;
}
function setAObj(A &$obj){
$this->aObj=$obj;
}
function someElsePrint($str){
echo "Hello from B (counter is $this->counter): $str\n";
$this->counter++;
}
}
$a = new A();
$b = new B();
$a->setBObj($b);
$b->setAObj($a);
$a->somePrint("Crosslink test");
$b->someElsePrint("Once more");
$a->somePrint("And again");
private $bObj;
private $buff;
function setBObj(B &$obj){
$this->bObj=$obj;
}
function somePrint($str){
$this->buff=$str;
echo "Hello from A: $this->buff\n";
if($this->bObj instanceof B){
$this->bObj->someElsePrint("It's from A too");
}
}
}
class B{
private $aObj;
private $counter;
function __construct(){
$this->counter = 0;
}
function setAObj(A &$obj){
$this->aObj=$obj;
}
function someElsePrint($str){
echo "Hello from B (counter is $this->counter): $str\n";
$this->counter++;
}
}
$a = new A();
$b = new B();
$a->setBObj($b);
$b->setAObj($a);
$a->somePrint("Crosslink test");
$b->someElsePrint("Once more");
$a->somePrint("And again");
Вот результат в консоли:
/usr/local/bin/php ./ctest.php
Hello from A: Crosslink test
Hello from B (counter is 0): It's from A too
Hello from B (counter is 1): Once more
Hello from A: And again
Hello from B (counter is 2): It's from A too
Oбратите внимание на счётчик
Про назначение parent прекрасно знаю - я имел ввиду что м.б. существует его аналог. Как оказалось нет.
Спасибо за участие всем. Тема закрыта.
Сделайте базовый класс и наследуйте оба класса от него так, что бы сохранялись ссылки и были предоставлены методы для пользования этим добром.[/QUOTE]
А толку-то от всего этого? Наследовать классы - не тоже самое, что создавать объекты. Объекты всё-равно не имеют связи между собой.
Я вижу только один выход: передавать объекты по ссылкам. Конечно, в этом случае летит к чёрту все принципы ООП и абстрагирования в частности. Отсюда мораль: нужно очень хитропопо мутить с абстрактными классами и интерфейсами (последнее в PHP как-то не очень...)
Кстати, интерфейсы - очень интересная тема :)
P.S.
Этот пост никоим образом не является попыткой продолжения диалога с господином RussianSpy, так как для себя он тему закрыл