Skip to content

Commit 4c55db3

Browse files
committed
Reword
1 parent dabd9ce commit 4c55db3

File tree

1 file changed

+33
-30
lines changed

1 file changed

+33
-30
lines changed

components/property_access.rst

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -104,36 +104,6 @@ To read from properties, use the "dot" notation::
104104

105105
var_dump($propertyAccessor->getValue($person, 'children[0].firstName')); // 'Bar'
106106

107-
.. tip::
108-
109-
You can give an object graph with nullable object.
110-
111-
Given an object graph ``comment.person.profile``, where ``person`` is optional (can be null),
112-
you can call the property accessor with ``comment.person?.profile`` (using the nullsafe
113-
operator) to avoid exception.
114-
115-
For example::
116-
117-
class Person
118-
{
119-
}
120-
class Comment
121-
{
122-
public ?Person $person = null;
123-
public string $message;
124-
}
125-
126-
$comment = new Comment();
127-
$comment->message = 'test';
128-
129-
// This code throws an exception of type
130-
// Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException
131-
var_dump($propertyAccessor->getValue($comment, 'person.firstname'));
132-
133-
// The code now returns null, instead of throwing an exception of type
134-
// Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException,
135-
var_dump($propertyAccessor->getValue($comment, 'person?.firstname')); // null
136-
137107
.. caution::
138108

139109
Accessing public properties is the last option used by ``PropertyAccessor``.
@@ -223,6 +193,39 @@ method::
223193
// instead of throwing an exception the following code returns null
224194
$value = $propertyAccessor->getValue($person, 'birthday');
225195

196+
Accessing Nullable Property Paths
197+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
198+
199+
Consider the following PHP code::
200+
201+
class Person
202+
{
203+
}
204+
205+
class Comment
206+
{
207+
public ?Person $person = null;
208+
public string $message;
209+
}
210+
211+
$comment = new Comment();
212+
$comment->message = 'test';
213+
214+
Given that ``$person`` is nullable, an object graph like ``comment.person.profile``
215+
will trigger an exception when the ``$person`` property is ``null``. The solution
216+
is to mark all nullable properties with the nullsafe operator (``?``)::
217+
218+
// This code throws an exception of type
219+
// Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException
220+
var_dump($propertyAccessor->getValue($comment, 'person.firstname'));
221+
222+
// If a property marked with the nullsafe operator is null, the expression is
223+
// no longer evaluated and null is returned immediately without throwing an exception
224+
var_dump($propertyAccessor->getValue($comment, 'person?.firstname')); // null
225+
226+
.. versionadded:: 6.2
227+
228+
The ``?`` nullsafe operator was introduced in Symfony 6.2.
226229

227230
.. _components-property-access-magic-get:
228231

0 commit comments

Comments
 (0)