Aylık Arşiv: Haziran 2013

PHP – Metottaki Closure Fonksiyondan Üye Metotu Çağırma

PHP’de bir sınıf (class) yazdınız ve bir metot içinde closure (isimsiz, anonim) fonksiyon kullandınız diyelim.
Ancak kodunuzun yapısı gereği bu oluşturduğunuz closure fonksiyondan yine aynı sınıf içerisinde ki başka bir metota (member method) erişmeniz gerekiyor.

Buradan sonra PHP 5.3’te işin rengi biraz değişiyor. :)

Normalde closure fonksiyondan bir başka fonksiyonu fonksiyonIsmi() şeklinde kolayca çağırabiliyorsunuz. Ancak sınıflarda bu durum biraz farklı işliyor.

İlk başta closure’dan $this->metodIsmi(); yapıldığında ilgili metota ulaşılabileceğinizi düşünmüş olabilirsiniz. Gayet yerinde bir düşünce :)

Bahsettiğim koda ulaşmak için buraya tıklayın.

Ancak kodun içinde de belirttiğim gibi PHP 5.3’te bu kod hata verecektir. Çünkü maalesef 5.3’te doğrudan $this ile erişim yapamıyorsunuz. Erişmek için $this değişkenini yerel bir değişkene atamalısınız. Ardından o değişkeni use anahtar kelimesi (keyword) ile closure fonksiyonda kullanmalısınız.

Örnek koda ulaşmak için buraya tıklayın.

Test ortamları: Linux Mint – PHP 5.3.10 (1. kod fatal error verdi. 2. kod çalıştı), Arch Linux – PHP 5.4.16 (İki kod da çalıştı), Scientific Linux – PHP 5.5.0beta1 (İki kod da çalıştı)

 
27 Kudos
Don't move