diff --git a/language/predefined/attributes.xml b/language/predefined/attributes.xml index 2e0c4555fa..b7fd5d603c 100644 --- a/language/predefined/attributes.xml +++ b/language/predefined/attributes.xml @@ -1,17 +1,18 @@ - + Предопределённые атрибуты - + В PHP предусмотрели и предопределили ряд атрибутов. - + &language.predefined.attributes.attribute; &language.predefined.attributes.allowdynamicproperties; + &language.predefined.attributes.delayedtargetvalidation; &language.predefined.attributes.deprecated; &language.predefined.attributes.nodiscard; &language.predefined.attributes.override; diff --git a/language/predefined/attributes/delayedtargetvalidation.xml b/language/predefined/attributes/delayedtargetvalidation.xml new file mode 100644 index 0000000000..c8ec3d2474 --- /dev/null +++ b/language/predefined/attributes/delayedtargetvalidation.xml @@ -0,0 +1,140 @@ + + + + + Атрибут DelayedTargetValidation + DelayedTargetValidation + + + +
+ &reftitle.intro; + + Атрибут откладывает проверку цели внутренних атрибутов и генерацию ошибок + с этапа компиляции до момента создания экземпляра объекта отражения атрибута через API-интерфейс модуля Reflection. + + + После нацеливания атрибута на объявление + недопустимое нацеливание других внутренних атрибутов на той же цели + не вызовет ошибку компиляции. Проверка откладывается и выполняется + только в момент создания объекта отражения атрибута методом + ReflectionAttribute::newInstance(). + + + Главное назначение атрибута — сделать текущий код совместимым с будущими версиями языка: + атрибут разрешает текущему коду работать без ошибок при разметке атрибутами целей, + совместимость с которыми появится только в новых версиях языка. + +
+ +
+ &reftitle.classsynopsis; + + + + #[\Attribute] + final + DelayedTargetValidation + + + +
+ +
+ &reftitle.examples; + + + Пример откладывания проверки недопустимой цели атрибута + + + + Ошибка компиляции не возникнет в PHP-версиях, в которых + нацеливание атрибута Override + на константы класса не поддерживается. + + + + + Пример выполнения проверки атрибута при интроспекции кода + getAttributes() as $attribute) { + $attribute->newInstance(); // Разметка атрибутом недопустимой цели спровоцирует ошибку +} +]]> + + + Проверка цели атрибута, который применили к объявлению вместе с атрибутом DelayedTargetValidation, + выполняется только в момент вызова метода ReflectionAttribute::newInstance(), + когда создаётся объект отражения атрибута. + При разметке несовместимой цели выбрасывается ошибка. + Проверка цели самого́ атрибута DelayedTargetValidation не выполняется. + + + +
+ +
+ &reftitle.notes; + + Атрибут влияет на проверку целей только внутренних атрибутов. + + + Атрибут не подавляет саму функциональную проверку, которую выполняют атрибуты. + Например, атрибут Override по-прежнему вызовет ошибку, + если метод, на который нацелили атрибут, не переопределяет родительский метод. + +
+ +
+ &reftitle.seealso; + + Обзор атрибутов + Override + +
+ +
+ +
+