mirror of
https://github.com/php/doc-ru.git
synced 2025-08-16 18:22:04 +00:00
Улучшение страницы "Атрибуты"
This commit is contained in:
@ -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>
|
||||
|
Reference in New Issue
Block a user