Метод isReadable класса PropertyAccessor
Метод isReadable класса PropertyAccessor проверяет, доступно ли
для чтения значение по указанному пути. Первым параметром передаётся
объект или массив, вторым - путь к свойству в виде строки. Метод возвращает
true, если значение можно прочитать, и false в противном случае.
Это полезно для безопасного чтения свойств через getValue без риска
получить исключение.
Синтаксис
public function isReadable(object|array $objectOrArray, string $propertyPath): bool
Пример
Давайте создадим объект и проверим читаемость его свойства:
<?php
namespace AppService;
use SymfonyComponentPropertyAccessPropertyAccess;
class PropertyChecker
{
public function check(): void
{
$article = new class {
public string $title = 'abcde';
private string $secret = 'hello';
};
$accessor = PropertyAccess::createPropertyAccessor();
var_dump($accessor->isReadable($article, 'title'));
var_dump($accessor->isReadable($article, 'secret'));
var_dump($accessor->isReadable($article, 'unknown'));
}
}
?>
Результат выполнения кода:
true
false
false
Пример
Давайте проверим читаемость вложенного свойства и элемента массива:
<?php
namespace AppService;
use SymfonyComponentPropertyAccessPropertyAccess;
class PropertyChecker
{
public function check(): void
{
$data = [
'user' => [
'name' => 'abcde',
'age' => 30,
],
];
$accessor = PropertyAccess::createPropertyAccessor();
var_dump($accessor->isReadable($data, '[user][name]'));
var_dump($accessor->isReadable($data, '[user][email]'));
}
}
?>
Результат выполнения кода:
true
false
Пример
Давайте используем isReadable перед вызовом getValue для безопасного чтения:
<?php
namespace AppService;
use SymfonyComponentPropertyAccessPropertyAccess;
class PropertyChecker
{
public function check(): void
{
$article = new class {
public string $title = 'article';
};
$accessor = PropertyAccess::createPropertyAccessor();
$path = 'title';
if ($accessor->isReadable($article, $path)) {
echo $accessor->getValue($article, $path);
} else {
echo 'not readable';
}
}
}
?>
Результат выполнения кода:
"article"
Смотрите также
-
класс
PropertyAccessor,
который предоставляет доступ к свойствам объектов и массивов -
метод
getValue,
который читает значение свойства по пути -
метод
setValue,
который записывает значение свойства по пути -
метод
isWritable,
который проверяет возможность записи свойства