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_CLASSAttribute::TARGET_FUNCTIONAttribute::TARGET_METHODAttribute::TARGET_PROPERTYAttribute::TARGET_CLASS_CONSTANTAttribute::TARGET_PARAMETERAttribute::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
{
}