v2.5.2
Giriş yap

bir fonksiyonu yeniden nasıl override edebilirim PHP ile

Anonim
485 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?

tayfunerbilen
1548 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
    }
    
}