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