bir fonksiyonu yeniden nasıl override edebilirim PHP ile
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?
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
}
}