Skip to content

Commit 04ee389

Browse files
authored
Create and Update Attributes to En (#1363)
* Create delayedtargetvalidation.xml * Update attributes.xml to en
1 parent 36289fa commit 04ee389

2 files changed

Lines changed: 144 additions & 3 deletions

File tree

language/predefined/attributes.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<!-- EN-Revision: 02bee41067ab2822cbffcb4b3b2387f79488dffd Maintainer: sergey Status: ready -->
2+
<!-- EN-Revision: efda0bb311990257715bd3a41ab2b04769ce2e4e Maintainer: sergey Status: ready -->
33
<!-- Reviewed: no -->
44
<part xml:id="reserved.attributes" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
55
<title>Предопределённые атрибуты</title>
66

77
<partintro>
8-
<para>
8+
<simpara>
99
В PHP предусмотрели и предопределили ряд атрибутов.
10-
</para>
10+
</simpara>
1111
</partintro>
1212

1313
&language.predefined.attributes.attribute;
1414
&language.predefined.attributes.allowdynamicproperties;
15+
&language.predefined.attributes.delayedtargetvalidation;
1516
&language.predefined.attributes.deprecated;
1617
&language.predefined.attributes.nodiscard;
1718
&language.predefined.attributes.override;
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- EN-Revision: efda0bb311990257715bd3a41ab2b04769ce2e4e Maintainer: malferov Status: ready -->
3+
<!-- Reviewed: no -->
4+
<reference xml:id="class.delayedtargetvalidation" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
5+
<title>Атрибут DelayedTargetValidation</title>
6+
<titleabbrev>DelayedTargetValidation</titleabbrev>
7+
8+
<partintro>
9+
10+
<section xml:id="delayedtargetvalidation.intro">
11+
&reftitle.intro;
12+
<simpara>
13+
Атрибут откладывает проверку цели внутренних атрибутов и генерацию ошибок
14+
с этапа компиляции до момента создания экземпляра объекта отражения атрибута через API-интерфейс модуля Reflection.
15+
</simpara>
16+
<simpara>
17+
После нацеливания атрибута на объявление
18+
недопустимое нацеливание других внутренних атрибутов на той же цели
19+
не вызовет ошибку компиляции. Проверка откладывается и выполняется
20+
только в момент создания объекта отражения атрибута методом
21+
<link linkend="reflectionattribute.newinstance">ReflectionAttribute::newInstance()</link>.
22+
</simpara>
23+
<simpara>
24+
Главное назначение атрибута — сделать текущий код совместимым с будущими версиями языка:
25+
атрибут разрешает текущему коду работать без ошибок при разметке атрибутами целей,
26+
совместимость с которыми появится только в новых версиях языка.
27+
</simpara>
28+
</section>
29+
30+
<section xml:id="delayedtargetvalidation.synopsis">
31+
&reftitle.classsynopsis;
32+
33+
<classsynopsis class="class">
34+
<ooclass>
35+
<modifier role="attribute">#[\Attribute]</modifier>
36+
<modifier>final</modifier>
37+
<classname>DelayedTargetValidation</classname>
38+
</ooclass>
39+
</classsynopsis>
40+
41+
</section>
42+
43+
<section xml:id="delayedtargetvalidation.examples">
44+
&reftitle.examples;
45+
46+
<example>
47+
<title>Пример откладывания проверки недопустимой цели атрибута</title>
48+
<programlisting role="php"><![CDATA[
49+
<?php
50+
51+
class Base
52+
{
53+
protected function foo(): void {}
54+
}
55+
56+
class Child extends Base
57+
{
58+
59+
#[\DelayedTargetValidation]
60+
#[\Override]
61+
public const NAME = 'child';
62+
63+
#[\Override]
64+
protected function foo(): void {}
65+
}
66+
]]></programlisting>
67+
68+
<simpara>
69+
Ошибка компиляции не возникнет в PHP-версиях, в которых
70+
нацеливание атрибута <classname>Override</classname>
71+
на константы класса не поддерживается.
72+
</simpara>
73+
</example>
74+
75+
<example>
76+
<title>Пример выполнения проверки атрибута при интроспекции кода</title>
77+
<programlisting role="php"><![CDATA[
78+
<?php
79+
80+
$reflection = new ReflectionClassConstant(Child::class, 'NAME');
81+
82+
foreach ($reflection->getAttributes() as $attribute) {
83+
$attribute->newInstance(); // Разметка атрибутом недопустимой цели спровоцирует ошибку
84+
}
85+
]]></programlisting>
86+
87+
<simpara>
88+
Проверка цели атрибута, который применили к объявлению вместе с атрибутом DelayedTargetValidation,
89+
выполняется только в момент вызова метода <link linkend="reflectionattribute.newinstance">ReflectionAttribute::newInstance()</link>,
90+
когда создаётся объект отражения атрибута.
91+
При разметке несовместимой цели выбрасывается ошибка.
92+
Проверка цели самого́ атрибута DelayedTargetValidation не выполняется.
93+
</simpara>
94+
</example>
95+
96+
</section>
97+
98+
<section xml:id="delayedtargetvalidation.notes">
99+
&reftitle.notes;
100+
<simpara>
101+
Атрибут влияет на проверку целей только внутренних атрибутов.
102+
</simpara>
103+
<simpara>
104+
Атрибут не подавляет саму функциональную проверку, которую выполняют атрибуты.
105+
Например, атрибут <classname>Override</classname> по-прежнему вызовет ошибку,
106+
если метод, на который нацелили атрибут, не переопределяет родительский метод.
107+
</simpara>
108+
</section>
109+
110+
<section xml:id="delayedtargetvalidation.seealso">
111+
&reftitle.seealso;
112+
<simplelist>
113+
<member><link linkend="language.attributes">Обзор атрибутов</link></member>
114+
<member><link linkend="class.override">Override</link></member>
115+
</simplelist>
116+
</section>
117+
118+
</partintro>
119+
120+
</reference>
121+
<!-- Keep this comment at the end of the file
122+
Local variables:
123+
mode: sgml
124+
sgml-omittag:t
125+
sgml-shorttag:t
126+
sgml-minimize-attributes:nil
127+
sgml-always-quote-attributes:t
128+
sgml-indent-step:1
129+
sgml-indent-data:t
130+
indent-tabs-mode:nil
131+
sgml-parent-document:nil
132+
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
133+
sgml-exposed-tags:nil
134+
sgml-local-catalogs:nil
135+
sgml-local-ecat-files:nil
136+
End:
137+
vim600: syn=xml fen fdm=syntax fdl=2 si
138+
vim: et tw=78 syn=sgml
139+
vi: ts=1 sw=1
140+
-->

0 commit comments

Comments
 (0)