v2.5.2
Giriş yap

bir fonksiyonu yeniden nasıl override edebilirim PHP ile

Anonim
578 defa görüntülendi ve 1 kişi tarafından değerlendirildi

bir fonksiyonum var adı test olsun, bu fonksiyonu int gelirse "int geldi" string gelirse "string geldi" yazmasını istiyorum.
bunu denedim çalışmıyor.


class ust_class extend CI_Model{
    public function test(int $deger){
        echo "int geldi";
    }
}

class alt_class extend ust_class{
    public function test(string $deger){
        echo "string geldi";
    }
}

bunları bu şekilde kullanmak istiyorum

$this->alt_class->test("test");
$this->alt_class->test(12345);

Çıktıları böyle olmalı:
"test geldi"
"int geldi"

nasıl yapabilirim?

Cevap yaz
Cevaplar (3)
tayfunerbilen
1923 gün önce

override işlemini tipe göre yapamazsın, extend ettiğin sınıfta metodu override edersen diğeri tamamen geçersiz kalır, o yüzden parametrenin tipinin de bir önemi kalmaz. Dediği gibi en mantıklısı if-else ya da switch-case ile kontrol ederek metodları çağırmak.

class alt_class extend ust_class{

    public function test($value)
    {
    
        if (is_int($value)) 
            call_user_func([self, 'int_test'], $value);
            
        elseif (is_string($value)) 
            call_user_func([self, 'string_test'], $value);
            
        elseif (is_float($value)) 
            call_user_func([self, 'float_test'], $value);
        
    }
    
    protected function int_test($value)
    {
        // işlem
    }
    
    protected function string_test($value)
    {
        // işlem
    }
    
    protected function float_test($value)
    {
        // işlem
    }
    
}
teytey
1923 gün önce

o şekilde yapamam 2 değişken gelirse toplasın istiyorum atıyorum tek değişken gelirse başka işlem yaptırsın değişkenlerin birisi arraysa farklı işlem integer ise farklı işlem yaptırsın..vs çok fazla uzar
bu yüzden override yapmam şart ama nasıl yapacağımı bulamadım.

makifgokce
1923 gün önce

override ile yapmana gerek yok bence bu şekilde çözebilirsin meseleyi

public function test($deger){
    if(is_int($deger)){
        echo "int geldi";
    } else if(is_string($deger)){
        echo "string geldi";
    } else if(is_float($deger)){
        echo "float";
    }
}