首页 > 解决方案 > 如何将 php 类扩展为覆盖其功能的类

问题描述

好吧,我有这样的结构:

class Creature{
  public function sayHi(){
      echo "Hi";
  }
}

class HumanType extends Creature(){

}

class Human extends HumanType{

}

class Human232 extends Human{
      public function sayHi(){
        echo "Hello, bro";
      }
 }

class Human457 extend Human{

}

$Human = new Human232($id);
echo $Human->sayHi(); //Hello, bro

$Human2 = new Human457($id);
echo $Human2->sayHi(); //Hi

//And then I have this still to be implemented
class HumanCategory576{
     public function sayHi(){
      echo "Hi from the category!";
  }
} 

我当然有很多课程,例如:Human457、Human458、Human459、Human600、Human601

还有:HumanCategory576、HumanCategory577、HumanCategory578、HumanCategory579、HumanCategory580

我想要做的是实现 HumanCategory576 的方式,sayHi() 会打印“Hi from the category!” 仅当(我想)继承它的 Human 类没有覆盖该函数时,例如 Human457。

我希望我足够清楚。

我该怎么办?谢谢

标签: phpclassinheritancepolymorphism

解决方案


我假设您打算class HumanCategory576扩展另一个类。

您可以通过is_callable()以下方式检查HumanCategory576父级是否具有该功能:

is_callable('parent::sayHi'){
    parent::sayHi();
}else{
    echo "Hi from the category!";
}

请在 PHP 的文档中使用is_callable 。

<?php

    class TestClass extends TestClassParent {

        /** @brief Object initialisation callback
            @returns void */
        public function __construct() {

            # do initialisation 

            # ...

            # if we have a parent 

            if(is_callable('parent::__construct')) {

                # then bubble up 

                parent::__construct();
            }
        }
    }
?>

推荐阅读