Skip to content

Commit 9627986

Browse files
committed
minor symfony#17884 [VarExporter] Add Hydrator section (alexandre-daubois)
This PR was merged into the 6.2 branch. Discussion ---------- [VarExporter] Add `Hydrator` section Fixes symfony#16827 Commits ------- 1d3958b [VarExporter] Add `Hydrator` section
2 parents 8b1d744 + 1d3958b commit 9627986

File tree

1 file changed

+65
-9
lines changed

1 file changed

+65
-9
lines changed

components/var_exporter.rst

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,30 +90,39 @@ file looks like this::
9090
[]
9191
);
9292

93-
Instantiating PHP Classes
94-
-------------------------
93+
Instantiating & Hydrating PHP Classes
94+
-------------------------------------
9595

96-
The other main feature provided by this component is an instantiator which can
97-
create objects and set their properties without calling their constructors or
98-
any other methods::
96+
Instantiator
97+
~~~~~~~~~~~~
98+
99+
This component provides an instantiator, which can create objects and set
100+
their properties without calling their constructors or any other methods::
99101

100102
use Symfony\Component\VarExporter\Instantiator;
101103

102-
// creates an empty instance of Foo
104+
// Creates an empty instance of Foo
103105
$fooObject = Instantiator::instantiate(Foo::class);
104106

105-
// creates a Foo instance and sets one of its properties
107+
// Creates a Foo instance and sets one of its properties
106108
$fooObject = Instantiator::instantiate(Foo::class, ['propertyName' => $propertyValue]);
107109

108-
// creates a Foo instance and sets a private property defined on its parent Bar class
110+
The instantiator also allows you to populate the property of a parent class. Assuming
111+
``Bar`` is the parent class of ``Foo`` and defines a ``privateBarProperty`` attribute::
112+
113+
use Symfony\Component\VarExporter\Instantiator;
114+
115+
// Creates a Foo instance and sets a private property defined on its parent Bar class
109116
$fooObject = Instantiator::instantiate(Foo::class, [], [
110117
Bar::class => ['privateBarProperty' => $propertyValue],
111118
]);
112119

113120
Instances of ``ArrayObject``, ``ArrayIterator`` and ``SplObjectHash`` can be
114121
created by using the special ``"\0"`` property name to define their internal value::
115122

116-
// Creates an SplObjectHash where $info1 is associated with $object1, etc.
123+
use Symfony\Component\VarExporter\Instantiator;
124+
125+
// Creates an SplObjectStorage where $info1 is associated with $object1, etc.
117126
$theObject = Instantiator::instantiate(SplObjectStorage::class, [
118127
"\0" => [$object1, $info1, $object2, $info2...],
119128
]);
@@ -123,5 +132,52 @@ created by using the special ``"\0"`` property name to define their internal val
123132
"\0" => [$inputArray],
124133
]);
125134

135+
Hydrator
136+
~~~~~~~~
137+
138+
The instantiator assumes the object you want to populate doesn't exist yet.
139+
Somehow, you may want to fill properties of an already existing object. This is
140+
the goal of the :class:`Symfony\\Component\\VarExporter\\Hydrator`. Here is a
141+
basic usage of the hydrator populating a property of an object::
142+
143+
use Symfony\Component\VarExporter\Hydrator;
144+
145+
$object = new Foo();
146+
Hydrator::hydrate($object, ['propertyName' => $propertyValue]);
147+
148+
The hydrator also allows you to populate the property of a parent class. Assuming
149+
``Bar`` is the parent class of ``Foo`` and defines a ``privateBarProperty`` attribute::
150+
151+
use Symfony\Component\VarExporter\Hydrator;
152+
153+
$object = new Foo();
154+
Hydrator::hydrate($object, [], [
155+
Bar::class => ['privateBarProperty' => $propertyValue],
156+
]);
157+
158+
// Alternatively, you can use the special "\0" syntax
159+
Hydrator::hydrate($object, ["\0Bar\0privateBarProperty" => $propertyValue]);
160+
161+
Instances of ``ArrayObject``, ``ArrayIterator`` and ``SplObjectHash`` can be
162+
populated by using the special ``"\0"`` property name to define their internal value::
163+
164+
use Symfony\Component\VarExporter\Hydrator;
165+
166+
// Creates an SplObjectHash where $info1 is associated with $object1, etc.
167+
$storage = new SplObjectStorage();
168+
Hydrator::hydrate($storage, [
169+
"\0" => [$object1, $info1, $object2, $info2...],
170+
]);
171+
172+
// creates an ArrayObject populated with $inputArray
173+
$arrayObject = new ArrayObject();
174+
Hydrator::hydrate($arrayObject, [
175+
"\0" => [$inputArray],
176+
]);
177+
178+
.. versionadded:: 6.2
179+
180+
The :class:`Symfony\\Component\\VarExporter\\Hydrator` was introduced in Symfony 6.2.
181+
126182
.. _`OPcache`: https://www.php.net/opcache
127183
.. _`PSR-2`: https://www.php-fig.org/psr/psr-2/

0 commit comments

Comments
 (0)