Herkese selamlar,

Bugün sizlere PHP 8 ile hayatımıza giren Attributes yapısını anlatacağım. İlk defa görüyorsanız şaşıracağınıza eğer ki Laravel veya Symfony kullanıyor iseniz ise sürekli gördüğünüz bu şeyin mantığını anladığınıza sevineceğinize eminim.

Attributes Nedir?
Aslında HTML yazarken bir etiketin içine yazdığımız "style" , "required" gibi şeyler birer attribute.
Bunu PHP'de olunca Class'lar için aşağıdaki şekilde kullanıyoruz.
<?php
#[Attribute]
#[AttributeName("attribute value")]
class sinifAdi{
}
Nasıl Erişiyoruz Bu Attributes'lara?
Bunun için PHP'de yer alan ReflectionClass diye bir yapıyı kullanıyoruz. Ve aşağıdaki şekilde içerisine ilgili class'ı ileterek Attributes'larına erişiyoruz.
<?php
#[AttrAdi("Attr Değeri 5")]
#[DiziOlarakAttr(
    min:5,
    max:10,
    key:"asdasd"
)]
class sinifAdi {
}
$class = new ReflectionClass('sinifAdi');
$attributes = $class->getAttributes();
foreach ($attributes as $attribute) {
    echo $attribute->getName() . "<br>";
    print_r($attribute->getArguments());
    echo "<br><br>";
}
?>
Yukarıdaki kodun çıktısı ise aşağıdaki gibi oluyor.


Ne için Kullanacağız?
Açıkçası bu sizin hayal gücünüze ve tecrübenize kalmış bir şey. Daha önceki derslerimde anlattığım Autoloader konusu ile sınıf gelirken işleyip Attributes'ına göre Route işlemi yapabilir veya Filtreleme işlemleriniz için basit şekilde kullanabilirsiniz.

Symfony'den Kullanım Örnekleri
Form Validation
class Participant
{
    #[Length(
        min: 2,
        max: 50,
        minMessage: 'Your first name must be at least {{ limit }} characters long',
        maxMessage: 'Your first name cannot be longer than {{ limit }} characters',
    )]
    protected $firstName;
}
Tabiki içerideki core kodlarında bu attribute'i ilişkilendirilen değer için kullanıyor/işliyor.

NOT: Detaylı bilgiye PHP.net üstündeki yerinden erişebilirsiniz => Attributes

Bol Şanslar ve iyi geliştirmeler