v2.5.2
Giriş yap

PHP otomatik class tanımları

desrana
487 defa görüntülendi

Merhaba dostlar,
PHP ile class başında tanımlar yapıyoruz, örneğin;

    class User
    {
    
        public string $name = "";
    
    }

Sorum şu olacak, ben en başta tanım yapmadan class içerisindeki bir fonksiyonda dizi ile yapabilimiyim bu tanımları.

Örneğin şöyle oluyor;

    foreach($attiributes as $key => $val)
    {
        $this->{$key} = $val;
    }

fakat burada tanımın public, private, static vb. olduğunu tanımlayamıyorum.

Bunları tanımlamanın bir yolu var mı ? :)

@tayfunerbilen

Cevap yaz
Cevaplar (3)
m100
1098 gün önce

Biraz geç cevap veriyorum kusura bakma bunu yapabilmenin bir kaç yolu var aslında benim ilk aklıma gelen yukarıdaki sınıf tanımlamanı tek bir array içinde örneğin;

public array $array = [
    'name' => "",
    'lastname' => "",
    'rank' =>"",
    'perm' = [],
    
];

şeklinde tanımladık diyelim sonrasında attr fonksiyonun için foreach kullanarak elemanları döndürüp;


foreach (self::$array as $key => $value) {
    self::$array[$key] = $veri[$key] // gelicek olan değer;
    
}
return self::$array;

şeklinde yaparsan çalışabileceğini düşünüyorum denemedim.
umarım sorunu doğru anlamışımdır, eğer anlamdıysam yardımcı olmak isterim iletişime geçebilirsin benimle

desrana
1110 gün önce

@m100 teşekkür ederim cevabın için fakat bahsettiğim tam olarak bu değil :(

Tekrar bir örnek ile anlatmak istiyorum.

    class User
    {
    
        public string $name = "";
        public string $lastname = "";
        public int $rank = "";
        public array $permission = [];
    
    }

Bu şekilde modelimin içerisinde kullanacağım tanımları ekliyorum.

Ardından;

    class User
    {
    
        public function attiributes(): array
        {
            return ["firstname", "lastname", "rank", "permission"]
        }
    
    }

buradada modelimdeki attiribuitleri (bunlar veritabanımdaki name'ler) ekliyorum.
Şimdi hem yukarıda tanımladım, hem aşağıda attiributes içinde.

Tabiki, üşengeçlik demeden bunu otomatize etmeye çalışıyorum. Yani attiributes içerisinde öyle birşey yapayımki;
dizideki elemanları kendi tanımlansın.
Mesela;

    class User
    {
    
        public function attiributes(): array
        {
            return [
                "firstname" => "public string"
                "lastname" => "public string" 
                "rank" => "public int"
                "permission" => "public array"
            ]
        }
    
    }

Umarım anlatabilmişimdir :)
Şimdi neden diyecek olursanız; Ben bu attiributes'i sadece bunun için kullanmıyorum. Dizi çıktısında hem label, hem kural, hemde diğer istediğim tanımları ekliyorum. Bu sayede tek bir fonksiyon içerisinden hem kendisine hemde extend olduğu sınıflara dağıtıp kullanabiliyorum.

m100
1110 gün önce

php'de sınıfların construct ve destruct diye iki tanımlı voidleri var construct sınıf başlatıldığında destruct da sonlandığında çalışacak fonksiyonlardır
sınıf tanımlamanın başına private gibi değişkenkeri boş koyup sınıf başladığında construct fonksiyonu içinde bunları tanımlayarak bunu elde edebilirsin

private static $Veri = [];

     function __construct(Request $request) {
        self::$Veri = [
            'categories' =>  Categories::get(),
            'hotCategories' =>  "asdawdawd",
            
        ]; 

    }