РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1020 of 1361 menu

Метод isWritable

Метод isWritable класса PropertyAccessor проверяет, можно ли записать значение в свойство объекта или в элемент массива. Первым параметром передаётся объект или массив, вторым - путь к свойству в виде строки. Метод возвращает true, если запись возможна, и false в противном случае.

Метод удобно использовать перед вызовом setValue, чтобы избежать исключения NoSuchPropertyException.

Синтаксис

$accessor->isWritable(object|array $object, string $path): bool

Пример

Давайте создадим объект с публичным свойством и проверим, можно ли в него записать значение:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PropertyAccess\PropertyAccess; class ArticleController extends AbstractController { public function index(): Response { $article = new class { public string $title = 'abcde'; }; $accessor = PropertyAccess::createPropertyAccessor(); $res = $accessor->isWritable($article, 'title'); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

true

Пример

Давайте проверим свойство, которого нет у объекта:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PropertyAccess\PropertyAccess; class ArticleController extends AbstractController { public function index(): Response { $article = new class { public string $title = 'abcde'; }; $accessor = PropertyAccess::createPropertyAccessor(); $res = $accessor->isWritable($article, 'text'); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

false

Пример

Давайте проверим элемент массива:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PropertyAccess\PropertyAccess; class ArticleController extends AbstractController { public function index(): Response { $article = ['title' => 'abcde', 'text' => 'hello']; $accessor = PropertyAccess::createPropertyAccessor(); $res = $accessor->isWritable($article, '[title]'); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

true

Пример

Давайте проверим объект с закрытым свойством без сеттера:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\PropertyAccess\PropertyAccess; class ArticleController extends AbstractController { public function index(): Response { $article = new class { private string $title = 'abcde'; }; $accessor = PropertyAccess::createPropertyAccessor(); $res = $accessor->isWritable($article, 'title'); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

false

Смотрите также

  • метод setValue,
    который записывает значение в свойство
  • метод getValue,
    который читает значение свойства
  • метод isReadable,
    который проверяет возможность чтения свойства
  • класс PropertyAccessor,
    который предоставляет доступ к свойствам объектов и массивов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить