waArrayObjectDiff
Хранение значений с доступом к ним, как в массивах, и с отслеживанием изменений
Класс позволяет организовать иерархическое хранение значений с равнозначным доступом к ним как к элементам многомерных массивов или объектов, содержащих коллекции объектов, — так же, как и родительский класс waArrayObject.
Отличие waArrayObjectDiff от родительского класса в том, что он также позволяет запоминать изменения значений свойств объекта и затем либо окончательно применять их, либо отменять. До применения или отмены временных изменений можно
просматривать их содержимое; после применения или отмены временных изменений их содержимое очищается.
Примеры
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
// сделать временное изменение
$object->foo = 300;
wa_dumpc(
$object->toArray(), // ['foo' => 300, 'bar' => 200]
$object->diff() // ['foo' => 300]
);
// а) отменить изменение
$object->revert();
wa_dumpc(
$object->toArray(), // ['foo' => 100, 'bar' => 200]
$object->diff() // []
);
// или
// б) применить изменение
// $object->merge();
//
// wa_dumpc(
// $object->toArray(), // ['foo' => 300, 'bar' => 200]
// $object->diff() // []
// );
Методы
-
__construct
Конструктор класса.
-
diff
Возвращает значения временных изменений в свойствах объекта.
-
merge
Применяет временные изменения в значениях свойств объекта.
-
revert
Отменяет временные изменения в значениях свойств объекта.
-
clearPersistent
Очищает постоянные значения, хранящиеся в свойствах объекта.
-
getPersistent
Возвращает экземпляр класса
waArrayObject, в котором хранятся постоянные значения свойств объекта. -
setPersistent
Устанавливает экземпляр класса
waArrayObject, в котором хранятся постоянные значения свойств объекта. -
restorePersistentInvariant
Восстанавливает корректную структуру данных после внесения изменений в свойство объекта
persistent.
public function __construct ($persistent = [])
Конструктор класса.
Параметры
-
$persistent
Значение, реализующее интерфейс
Traversable, или экземпляр классаwaArrayObject.
Пример
// вариант 1
$array_object_diff = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
// вариант 2
$array_object_ = new waArrayObject([
'foo' => 100,
'bar' => 200,
]);
$array_object_diff = new waArrayObjectDiff($array_object_);
public function diff ($new = true)
Возвращает значения временных изменений в свойствах объекта.
Параметры
-
$new
Режим возвращаемого значения:
true: вернуть массив новых значений изменённых свойств.false: вернуть массив старых значений изменённых свойств — в том числе если старое значение было удалено конструкциейunset().
Пример
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
$object->foo = 300;
wa_dump(
$object->diff(true), // ['foo' => 300]
$object->diff(false), // ['foo' => 100]
);
Пример
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
unset($object->foo);
wa_dump(
$object->diff(true), // []
$object->diff(false), // ['foo' => 100]
);
public function merge()
Применяет временные изменения в значениях свойств объекта.
Пример
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
$object->foo = 300;
$object->merge();
// содержимое изменений
wa_dump($object->diff(true)); // []
public function revert()
Отменяет временные изменения в значениях свойств объекта.
Пример
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
$object->foo = 300;
$object->revert();
wa_dump($object->toArray());
Результат
[
'foo' => 100,
'bar' => 200,
]
public function clearPersistent()
Очищает постоянные значения свойств объекта и переносит их в хранилище временных изменений. После этого объект находится в том же состоянии, как если бы для пустого объекта выполнили запись временных изменений и ещё не применили их методом merge().
Пример
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
wa_dumpc(
$object->toArray(), // ['foo' => 100, 'bar' => 200]
$object->diff() // []
);
// очистить постоянные значения
// и перенести их во временные изменения
$object->clearPersistent();
wa_dumpc(
$object->toArray(), // ['foo' => 100, 'bar' => 200]
$object->diff() // ['foo' => 100, 'bar' => 200]
);
// удалить временные изменения
// постоянные значения уже удалены методом clearPersistent()
$object->revert();
wa_dumpc(
$object->toArray(), // []
$object->diff() // []
);
public function getPersistent()
Возвращает экземпляр класса waArrayObject, в котором хранятся постоянные значения свойств объекта.
Пример
$object = new waArrayObjectDiff([
'foo' => 100,
'bar' => 200,
]);
wa_dump($object->getPersistent());
Результат
waArrayObject object {
*rec_data => [
'foo' => 100,
'bar' => 200,
]
*stub => false
}
public function setPersistent (waArrayObject $p)
Устанавливает экземпляр класса waArrayObject, в котором хранятся постоянные значения свойств объекта.
Пример
$object = new waArrayObjectDiff();
$object->setPersistent(new waArrayObject([
'foo' => 100,
'bar' => 200,
]));
public function restorePersistentInvariant()
Восстанавливает корректную структуру данных после внесения изменений в свойство объекта persistent, например, в коде классов-наследников.
Пример
class myArrayObjectDiff extends waArrayObjectDiff
{
public function setPersistentValue ($name, $value)
{
$this->persistent[$name] = $value;
$this->restorePersistentInvariant();
}
}









