Улучшение страницы "Атрибуты"

This commit is contained in:
Alexey Pyltsyn
2022-04-28 01:40:43 +03:00
parent 7ee5845589
commit 38acb44f00

View File

@ -17,8 +17,8 @@
</para>
<para>
С помощью атрибутов можно разделить абстрактную реализацию какого-либо
функционала и особенности его использования в коде. В некотором
С помощью атрибутов можно разделить абстрактную реализацию какой-либо
функциональности и особенности её использования в коде. В некотором
смысле это можно сравнить с разделением интерфейса и его реализаций.
Но интерфейсы и реализации - это про код, а атрибуты - про добавление
дополнительной информации и конфигурацию. Интерфейсы могут
@ -29,7 +29,7 @@
<para>
Давайте разберём использование атрибутов на простом примере реализации опциональных
методов для интерфейса . Примем, что интерфейс <literal>ActionHandler</literal> описывает некую
методов для интерфейса. Допустим, что интерфейс <literal>ActionHandler</literal> описывает некую
операцию в приложении. Одни реализации этого интерфейса требуют
предварительной настройки, а другие - нет. И вместо того, чтобы вносить в
интерфейс <literal>ActionHandler</literal> дополнительный метод
@ -111,7 +111,7 @@ executeAction($copyAction);
<title>Синтаксис атрибутов</title>
<para>
Синтаксис атрибутов состоит из нескольких частей. Во-первых, декларация
Синтаксис атрибутов состоит из нескольких частей. Для начала декларация
атрибута всегда начинается с символа <literal>#[</literal> и заканчивается
<literal>]</literal>. Внутри перечисление из одного или более, разделённых запятой, атрибутов.
Атрибуты можно задавать с помощью неполных, полных и абсолютных имён, как описано в разделе
@ -184,11 +184,11 @@ class AnotherThing
Для доступа к атрибутам классов, методов, функций, параметров, свойств и констант класса, в Reflection API
присутствует метод <function>getAttributes</function> для каждого из перечисленных объектов рефлексии.
Этот метод возвращает массив экземпляров <classname>ReflectionAttribute</classname>, у каждого из которых
можно запросить имя атрибута и его аргументы, а также инстанцирование объекта, представляющего атрибут.
можно запросить имя атрибута и его аргументы, а также создать объект, представляющего атрибут.
</para>
<para>
Такое отделение свойств атрибута от явного инстанцирования даёт программисту более полный контроль над
Такое отделение свойств атрибута от явного создания объекта даёт программисту более полный контроль над
обработкой ошибок, связанных с отсутствующим классом атрибута и некорректностью его аргументов.
Объект атрибута будет создан и проверен на корректность аргументов только после вызова
<function>ReflectionAttribute::newInstance</function>, не раньше.
@ -277,7 +277,7 @@ dumpMyAttributeData(new ReflectionClass(Thing::class));
<para>
Создавать классы для атрибутов не обязательно, но крайне рекомендуется.
В самом простом случае, требуется просто пустой класс с атрибутом <literal>#[Attribute]</literal>, который
В самом простом случае требуется просто пустой класс с атрибутом <literal>#[Attribute]</literal>, который
можно импортировать из глобального пространства имён с помощью оператора use.
</para>
@ -306,7 +306,7 @@ class MyAttribute
</para>
<example>
<title>Ограничение допустимых целей для использования атрибута</title>
<title>Ограничение допустимых сущностей для использования атрибута</title>
<programlisting role="php">
<![CDATA[
@ -324,12 +324,12 @@ class MyAttribute
</programlisting>
<para>
После этого, аннотирование атрибутом <classname>MyAttribute</classname> чего либо, отличного от метода или функции приведёт
к выбросу исключения при вызове <function>ReflectionAttribute::newInstance</function>
После этого аннотирование атрибутом <classname>MyAttribute</classname> чего-либо, отличающегося от метода или функции, приведёт
к выбрасыванию исключения при вызове <function>ReflectionAttribute::newInstance</function>.
</para>
</example>
<para>Можно указать следующие цели:</para>
<para>Можно указать следующие сущности:</para>
<simplelist>
<member><constant>Attribute::TARGET_CLASS</constant></member>
@ -342,7 +342,7 @@ class MyAttribute
</simplelist>
<para>
По умолчанию, атрибут можно использовать только один раз для каждой сущности. Если нужна возможность указывать
По умолчанию атрибут можно использовать только один раз для каждой сущности. Если нужна возможность указывать
несколько одинаковых атрибутов для одной сущности - можно выставить соответствующий флаг в битовой маске
для декларации <literal>#[Attribute]</literal>.
</para>