vcjaenhy
20.08.2019 - 18:58
Всем привет.
Есть класс1 и в нем есть функция для вызова класса2.
Когда объект 1 запускает объект 2, объекту 2 необходима информация, которую может предоставить объект 1.
Вижу лишь 2 способа
1) либо сразу объект 1 передает все необходимые данные объекту 2.
2) Либо parent:: function ,
Я походу торможу сильно, но почему то всегда прописывал "прямое линейное взаимодействие" передачи информации от объекта к объекту
и вот здесь возникают вопросы
Если дочерний класс является расширением для родительского класса нормально ли что он запрашивает у родителя данные?
если используется конструкция parent::function вызов функции происходит для объекта или для класса?
brevis
20.08.2019 - 19:12
Цитата (vcjaenhy @ 20.08.2019 - 18:58) |
Вижу лишь 2 способа |
Первый предпочтительнее.
Цитата (vcjaenhy @ 20.08.2019 - 18:58) |
Если дочерний класс является расширением для родительского класса нормально ли что он запрашивает у родителя данные? |
Не очень. Неверно спроектировано наследование. Но это зависит от точки зрения, с которой рассматривать данный дизайн: если это некое подобие полиморфизма -- то ок, а если жесткая завязка на конкретный метод родителя -- не очень.
Цитата (vcjaenhy @ 20.08.2019 - 18:58) |
если используется конструкция parent::function вызов функции происходит для объекта или для класса? |
Если родительский метод статический -- вызов происходит у класса. Если не статический -- у объекта.
_____________
Чатик в телеге
vcjaenhy
20.08.2019 - 19:20
блин сори я туплю
вообщем так есть два класса) независимые без наследования друг друга
в первом классе есть функция вызова объекта второго класса.
когда объект 1 вызывает объект 2, как объект 2 может обратиться к вызвавшему его объекту 1?
brevis
20.08.2019 - 19:28
Нужно в метод объекта 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
20.08.2019 - 19:30
Опишу задачу как то тупиково все получается
есть модуль - абстрактная единица
в модуль входит
1 )"класс валидации" - его объект принимает информацию для запросов, проверяет ее валидность, и вызывает функцию объекта "класса ядра" модуля
2) " класс ядра" модуля - выполняет все операции с бд
и вычислительные задачи
3) "класс заданий" - принимает от " объекта ядра" информацию о формировании нового задания и заносит его в бд, а так же возвращает "ядру" информацию о всех заданиях
и вот возник вопрос как реализовать функционал задания для модуля,
задание формирует пользователь, данные поступают от "валидационного объекта" к "ядру", из "ядра" в "объект заданий", где эти данные должны быть сопоставлены с общими данными системы, а для этого необходимо обратиться к "объекту ядра" модуля т.к. общих данных очень много
Как лучше спроектировать функционал "заданий" ?
vcjaenhy
20.08.2019 - 19:31
brevisНужно в метод объекта 2 передать ссылку на объект 1 ($this):
а это нормально или это корявое решение?
Вообще если рассматривать, это как расширение базового объекта, имеющего доступ к информации от родительского объекта.. то наверно нормально.
и я может туплю но неужели нет встроенных функций для обращения к родительскому объекту?
brevis
20.08.2019 - 19:44
Цитата (vcjaenhy @ 20.08.2019 - 19:31) |
а это нормально или это корявое решение? |
Нормально.
Цитата (vcjaenhy @ 20.08.2019 - 19:31) |
"расширение базового объекта", "к родительскому объекту" |
Эти слова имеют прямое отношение к наследованию. А ты говоришь у тебя наследования нет.
_____________
Чатик в телеге
vcjaenhy
20.08.2019 - 19:48
Эти слова имеют прямое отношение к наследованию. А ты говоришь у тебя наследования нет.
Наследования классов нет, я об этом
Спасибо, brevis
brevis
20.08.2019 - 20:01
Цитата (vcjaenhy @ 20.08.2019 - 19:48) |
Наследования классов нет, я об этом |
Ну понятно. То, что у тебя, скорее всего называется по-умному "Двусторонняя связь" (Bidirectional Association). Если возможно, то те же самые умные ребята
рекомендуют от нее избавляться.
_____________
Чатик в телеге
vcjaenhy
20.08.2019 - 20:07
Спасибо, отличный сайт
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.