如何将php类扩展到ovverride函数的类

时间:2019-02-15 01:36:06

标签: php class inheritance polymorphism

好的,我有这样的结构:

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!";
  }
} 

我当然有很多课程,例如: 人类457, 458 人类459, 人600 Human601

并且: 576, 人类类别577, 578, 人类类别579, HumanCategory580

我想做的是以某种方式实现HumanCategory576,以便sayHi()可以打印“类别中的Hi!”。 (前提是)(要是我继承的)Human类没有遍历该函数,例如Human457。

我希望我足够清楚。

我该怎么办?谢谢

1 个答案:

答案 0 :(得分:0)

我假设您打算让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();
            }
        }
    }
?>