Как реализовать dependency-tracking и change-notification в PHP? Хочу в PHP реализовать "dependency-tracking" и "change-notification" между свойствами разных объектов.
Всё должно выглядеть примерно так:prop = $object1->prop + 5;
$object3->prop = $object2->prop * 2;
// Меняем какое-то свойство
$object1->prop = 2;
// Свойства автоматически обновляются
echo $object2->prop; // -> 7
echo $object3->prop; // -> 14
То есть, при изменении свойства какого-то объекта, все зависящие от него свойства других объектов должны меняться в реальном времени.
Как лучше всего это реализовать? Есть ли какой-нибудь шаблон проектирования, который поможет осуществить это?

21 Авг 2019 в 07:04
217 +1
0
Ответы
1

Один из способов реализации подобного функционала в PHP - использование паттерна "Наблюдатель" (Observer).

Вы можете создать субъект, который содержит свойства и методы для добавления, удаления и уведомления наблюдателей о изменениях. Наблюдатели будут отслеживать изменения в свойствах субъекта и реагировать на них.

Пример кода:

class Subject {
private $observers = [];
public function addObserver(Observer $observer) {
$this->observers[] = $observer;
}
public function removeObserver(Observer $observer) {
foreach ($this->observers as $key => $obs) {
if ($obs === $observer) {
unset($this->observers[$key]);
break;
}
}
}
public function notifyObservers() {
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
}
interface Observer {
public function update(Subject $subject);
}
class Class1 extends Subject {
private $prop;
public function setProp($value) {
$this->prop = $value;
$this->notifyObservers();
}
public function getProp() {
return $this->prop;
}
}
class Class2 implements Observer {
private $prop;
public function update(Subject $subject) {
// Реагировать на изменения Class1
$this->prop = $subject->getProp() + 5;
}
}
class Class3 implements Observer {
private $prop;
public function update(Subject $subject) {
// Реагировать на изменения Class2
$this->prop = $subject->getProp() * 2;
}
}
// Создаем объекты
$object1 = new Class1;
$object2 = new Class2;
$object3 = new Class3;
// Добавляем зависимости
$object1->addObserver($object2);
$object2->addObserver($object3);
// Устанавливаем начальное значение
$object1->setProp(2);
// Свойства автоматически обновляются
echo $object2->getProp(); // -> 7
echo $object3->getProp(); // -> 14

Это только один из способов реализации. Вы также можете использовать другие паттерны проектирования или библиотеки для реализации dependency-tracking и change-notification в PHP.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир