Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Class içindeki static fonksiyondan, static olmayan fonksiyonu çağırma

Aşağıdaki örneğe benzer bir class yapım var. Kullandığım framework model içindeki classları static olarak belirtilmesini zorunlu kılıyor. Controller classı static olarak çağırıyor. Buraya kadar herşey normal.

Model içinde yeni bir fonksiyon tanımladım ve static olarak belirtmedim. Static fonksiyondan static olmayan fonksiyonu $this->fonksiyon adı şeklinde haliyle cağırılamıyor.

class test
{
    public static function check()
    {
    	echo $this->clean();
    }
    private function clean(){
    	return 'test';
    }
}


Çözüm olarak aşağıdaki gibi bir değişiklik yaptım. Yalnız doğru çözüm olup olmadığından emin olamadım.

class test
{
    public static function check()
    {
    	echo self::clean();
    }
    private static function clean(){
    	return 'test';
    }
}
  • cleandata() yerine clean() olacak yazarken gözümden kaçmış
    Kesali 9 yıl önce yazdı
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • 1
    siyahbeyaz adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    472 cevap - 20 soru
    http://php.net/manual/en/language.oop5.static.php
    burdanda faydalanabilirsin.. static fonksiyonlarda $this yerine self:: kullanma zorunlulugu var..
    bi public bide static fonksiyonu ic ice kullanım ıcın pek bilgim yok. c# da böyle birsey söz konusu olamaz. eger bir class static olarka belirtilmişse diger void ve fonksiyonlar static olmalıdır.. aksi halde hata alırsınız. bu kural php de gecerli olacagini düsünüyorum :S
    • Kesali adlı üyenin fotoğrafı Kesali
      Teşekkür ederim cevabın için. OOP programlama mantığını biliyorum zaten statik olmayan fonksiyonu static tanımlayıp self:: ile çağırdım orda bir problem yok.

      Biraz kullandığım frameworkün yapısını beğenmedim. Model oluşturuken model içindeki fonksiyonları statik belirleyip controllerden Model_Modeladı::fonksiyon() şeklinde çağırıyorum. Codeigniterdaki $this-> yerine daha temiz ve anlaşılır.

      Ama işte model içinde kullandığım her classı static tanımlayıp self:: ile çağırmak istemedim ama olmuyor anlaşılan.
      9 yıl önce yazılmış

Cevaplar

  • curlyhair adlı üyenin fotoğrafı
    9 yıl önce yazılmış
    27 cevap - 18 soru
    siyahbeyaz 'ındediği gibi statik bir method içerisn de this kullanamazsın