[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как обратиться к родительскому объекту
vcjaenhy
Всем привет.
Есть класс1 и в нем есть функция для вызова класса2.

Когда объект 1 запускает объект 2, объекту 2 необходима информация, которую может предоставить объект 1.
Вижу лишь 2 способа
1) либо сразу объект 1 передает все необходимые данные объекту 2.
2) Либо parent:: function ,


Я походу торможу сильно, но почему то всегда прописывал "прямое линейное взаимодействие" передачи информации от объекта к объекту

и вот здесь возникают вопросы

Если дочерний класс является расширением для родительского класса нормально ли что он запрашивает у родителя данные?

если используется конструкция parent::function вызов функции происходит для объекта или для класса?

brevis
Цитата (vcjaenhy @ 20.08.2019 - 18:58)
Вижу лишь 2 способа

Первый предпочтительнее.

Цитата (vcjaenhy @ 20.08.2019 - 18:58)
Если дочерний класс является расширением для родительского класса нормально ли что он запрашивает у родителя данные?

Не очень. Неверно спроектировано наследование. Но это зависит от точки зрения, с которой рассматривать данный дизайн: если это некое подобие полиморфизма -- то ок, а если жесткая завязка на конкретный метод родителя -- не очень.

Цитата (vcjaenhy @ 20.08.2019 - 18:58)
если используется конструкция parent::function вызов функции происходит для объекта или для класса?

Если родительский метод статический -- вызов происходит у класса. Если не статический -- у объекта.

_____________
Чатик в телеге
vcjaenhy
блин сори я туплю


вообщем так есть два класса) независимые без наследования друг друга

в первом классе есть функция вызова объекта второго класса.

когда объект 1 вызывает объект 2, как объект 2 может обратиться к вызвавшему его объекту 1?
brevis
Нужно в метод объекта 2 передать ссылку на объект 1 ($this):
class Class1 {
private $o2;

public function __construct(Class2 $o2) {
$this->o2 = $o2;
}

public function foo() {
$this->o2->baz($this);
}

public function bar() {
echo 'bar';
}
}


class Class2 {
public function baz(Class1 $o1) {
$o1->bar();
}
}


$o2 = new Class2();
$o1 = new Class1($o2);
$o1->foo();


_____________
Чатик в телеге
vcjaenhy
Опишу задачу как то тупиково все получается

есть модуль - абстрактная единица

в модуль входит

1 )"класс валидации" - его объект принимает информацию для запросов, проверяет ее валидность, и вызывает функцию объекта "класса ядра" модуля

2) " класс ядра" модуля - выполняет все операции с бд
и вычислительные задачи

3) "класс заданий" - принимает от " объекта ядра" информацию о формировании нового задания и заносит его в бд, а так же возвращает "ядру" информацию о всех заданиях


и вот возник вопрос как реализовать функционал задания для модуля,
задание формирует пользователь, данные поступают от "валидационного объекта" к "ядру", из "ядра" в "объект заданий", где эти данные должны быть сопоставлены с общими данными системы, а для этого необходимо обратиться к "объекту ядра" модуля т.к. общих данных очень много

Как лучше спроектировать функционал "заданий" ?
vcjaenhy
brevis
Нужно в метод объекта 2 передать ссылку на объект 1 ($this):

а это нормально или это корявое решение?
Вообще если рассматривать, это как расширение базового объекта, имеющего доступ к информации от родительского объекта.. то наверно нормально. smile.gif

и я может туплю но неужели нет встроенных функций для обращения к родительскому объекту?
brevis
Цитата (vcjaenhy @ 20.08.2019 - 19:31)
а это нормально или это корявое решение?

Нормально.

Цитата (vcjaenhy @ 20.08.2019 - 19:31)
"расширение базового объекта", "к родительскому объекту"

Эти слова имеют прямое отношение к наследованию. А ты говоришь у тебя наследования нет.

_____________
Чатик в телеге
vcjaenhy
Эти слова имеют прямое отношение к наследованию. А ты говоришь у тебя наследования нет.


Наследования классов нет, я об этом

Спасибо, brevis
brevis
Цитата (vcjaenhy @ 20.08.2019 - 19:48)
Наследования классов нет, я об этом

Ну понятно. То, что у тебя, скорее всего называется по-умному "Двусторонняя связь" (Bidirectional Association). Если возможно, то те же самые умные ребята рекомендуют от нее избавляться.

_____________
Чатик в телеге
vcjaenhy
Спасибо, отличный сайт
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.