• 18-02-2023, 12:18:07
    #1
    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
    • trgino
    • yavuzk
    • MaSTeK1
    trgino, yavuzk, MaSTeK1 ve 2 kişi bunu beğendi.
    5 kişi bunu beğendi.
  • 18-02-2023, 12:45:50
    #2
    Platin üye
    Forum ruhuna yararlı bilgiler, paylaşım için teşekkürler.