Zorunlu olmamakla birlikte, her öznitelik için gerçek bir sınıfın oluşturulması önerilir. En basit durumda, bir use ifadesiyle küresel isim alanından içe aktarılabilen #[Attribute] özniteliğinin bildirimi için yalnızca boş bir sınıfa ihtiyaç vardır.
Örnek 1 - Basit Öznitelik sınıfı
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Bir özniteliğin atanabileceği bildirim türünü kısıtlamak için, #[Attribute] bildirimine ilk bağımsız değişken olarak bir bit maskesi aktarılabilir.
Örnek 2 - Özniteliklerin kullanılabileceği yerleri kısıtlamak için hedef belirtiminin kullanımı
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
MyAttribute sınıfının başka bir türde bildirilmesi, ReflectionAttribute::newInstance() çağrısı sırasında bir istisna oluşmasına sebep olur.
Şu hedefler belirtilebilir:
Attribute::TARGET_CLASS
Attribute::TARGET_FUNCTION
Attribute::TARGET_METHOD
Attribute::TARGET_PROPERTY
Attribute::TARGET_CLASS_CONSTANT
Attribute::TARGET_PARAMETER
Attribute::TARGET_ALL
Öntanımlı olarak, bir öznitelik her bildirimde yalnızca bir kere kullanılabilir. Özniteliğin bildirimlerde yinelenebilir olması isteniyorsa, #[Attribute]
bildiriminde bit maskesinin bir parçası olarak belirtilmelidir.
Örnek 3 - Özniteliğin bir bildirimle defalarca kullanılabilmesi için IS_REPEATABLE kullanımı
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}