Класс PropertyAccessor
Класс PropertyAccessor позволяет получать и изменять значения
вложенных свойств объектов и элементов массивов, используя
специальный синтаксис путей. Первым параметром в методы передаётся
объект или массив, вторым - путь к свойству в виде строки.
Это избавляет от необходимости писать длинные цепочки проверок
на существование свойств.
Синтаксис
<?php
use Symfony\Component\PropertyAccess\PropertyAccess;
$accessor = PropertyAccess::createPropertyAccessor();
$accessor->getValue($object, 'property.path');
$accessor->setValue($object, 'property.path', 'value');
$accessor->isReadable($object, 'property.path');
$accessor->isWritable($object, 'property.path');
?>
Пример
Давайте создадим простой объект и получим значение его свойства:
<?php
namespace App\Service;
use Symfony\Component\PropertyAccess\PropertyAccess;
class ArticleService
{
public function getArticleTitle(): string
{
$article = new \stdClass();
$article->title = 'abcde';
$accessor = PropertyAccess::createPropertyAccessor();
return $accessor->getValue($article, 'title');
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте изменим значение вложенного свойства объекта:
<?php
namespace App\Service;
use Symfony\Component\PropertyAccess\PropertyAccess;
class ArticleService
{
public function updateArticle(): string
{
$author = new \stdClass();
$author->name = 'user';
$article = new \stdClass();
$article->title = 'abcde';
$article->author = $author;
$accessor = PropertyAccess::createPropertyAccessor();
$accessor->setValue($article, 'author.name', 'hello');
return $article->author->name;
}
}
?>
Результат выполнения кода:
"hello"
Пример
Давайте проверим, доступно ли свойство для чтения:
<?php
namespace App\Service;
use Symfony\Component\PropertyAccess\PropertyAccess;
class ArticleService
{
public function checkReadable(): bool
{
$article = new \stdClass();
$article->title = 'abcde';
$accessor = PropertyAccess::createPropertyAccessor();
return $accessor->isReadable($article, 'title');
}
}
?>
Результат выполнения кода:
true
Смотрите также
-
метод
getValue,
который читает значение свойства по пути -
метод
setValue,
который записывает значение свойства по пути -
метод
isReadable,
который проверяет доступность свойства для чтения -
метод
isWritable,
который проверяет доступность свойства для записи