Класс позволяет организовать иерархическое хранение значений с равнозначным доступом к ним как к элементам многомерных массивов или объектов, содержащих коллекции объектов, — так же, как и родительский класс 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(); } }