Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обращение к объекту

13
30 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
 
Код:
class A {...}
class B {...}

$ObjA = new A;
$ObjA->ObjB = new B;


Как методам объекта $ObjB обратиться к методам и свойствам объекта $ObjA? Может существует конструкция наподобие parent?
17K
30 августа 2006 года
cyber_punk
11 / / 30.08.2006
Привет,
Не уверен что Ты не знаешь о наследование классов в РНР, но мне кажется, что вопрос именно по этой части.

Код:
class A {

     val1 = "";
     val2 = "";
   
     function getval1A(){
       return val1;
     }
}

class B extends A {
  function getval1_from_A(){
     return $this->getval1A();
  }
}


Ну или мануал по РНР. Там есть все по классам.
13
30 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Прежде чем отвечать обычно надо прочитать вопрос - там нет ни слова о наследовании. Там вопрос о том как подняться выше и получить доступ к объекту содержащему данный объект.
17K
30 августа 2006 года
cyber_punk
11 / / 30.08.2006
Не знаю, можноли тут давать снова подобные советы. но вот по этому линку в примерах все написано. И данная конструкция подходит для подъема наверх. http://ee.php.net/manual/en/ref.classobj.php
13
30 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=cyber_punk]Не знаю, можноли тут давать снова подобные советы. но вот по этому линку в примерах все написано. И данная конструкция подходит для подъема наверх. http://ee.php.net/manual/en/ref.classobj.php[/QUOTE]
Дла классов... Но не для двух объектов производных разных классов. Смотри какой пример я привел в своем вопросе.

Линку эту уже читал - там ничего нет.
860
30 августа 2006 года
Abell2000
138 / / 15.01.2003
Как вариант, а что если передать в B указатель на $ObjA
---

Просмотрел топики ниже и нашел вот это http://forum.codenet.ru/showthread.php?t=29182
разве это не тоже самое?
15
31 августа 2006 года
shaelf
2.7K / / 04.05.2005
Оффтоп. В своё время я мучался с одной вещью.
Было 3 класса. config.class.php (настройки), db.class.php(операции с БД) и остальные (news, catalog etc...), так вот, мне нужно было найти в классах множественное наследование, но его там просто небыло. Тогда я config определил как static. Тебе он не подойдёт?
285
31 августа 2006 года
Romik
479 / / 24.11.2002
господин RussianSpy, нелогично ждать от объекта свойства parent, если его никто туда не поместил, однако сделать это можете Вы.
Сделайте базовый класс и наследуйте оба класса от него так, что бы сохранялись ссылки и были предоставлены методы для пользования этим добром.
Другой вариант, вы можете просто в классе 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");

Вот результат в консоли:
/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братите внимание на счётчик
13
31 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Собственно с линками и сделал ибо перерыв гору учебником и мануалов по РНР и С++, а также проведя опрос знакомых программеров другого пути найти не смог.

Про назначение parent прекрасно знаю - я имел ввиду что м.б. существует его аналог. Как оказалось нет.
Спасибо за участие всем. Тема закрыта.
8
31 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Romik]
Сделайте базовый класс и наследуйте оба класса от него так, что бы сохранялись ссылки и были предоставлены методы для пользования этим добром.[/QUOTE]

А толку-то от всего этого? Наследовать классы - не тоже самое, что создавать объекты. Объекты всё-равно не имеют связи между собой.

Я вижу только один выход: передавать объекты по ссылкам. Конечно, в этом случае летит к чёрту все принципы ООП и абстрагирования в частности. Отсюда мораль: нужно очень хитропопо мутить с абстрактными классами и интерфейсами (последнее в PHP как-то не очень...)
285
31 августа 2006 года
Romik
479 / / 24.11.2002
Господин mfender, идея в том, чтобы обеспечить простой интерфейс передачи ссылок. Я прекрасно понимаю, что объекты не имеют связи между собой просто так ниоткуда. Базовый класс должен включать в себя простые способы (методы) связи объектов (instance) вроде того, что я привёл выше. В использовании базового класса есть сущестевенный аргумент, классы будут приведены к единому порядку и тогда уже можно вести речь о свойстве parent. В приведённом выше примере ни о каком единстве речи быть не может. Там просто условность.
Кстати, интерфейсы - очень интересная тема :)

P.S.
Этот пост никоим образом не является попыткой продолжения диалога с господином RussianSpy, так как для себя он тему закрыл
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог