在php中使用多态的正确方法?

时间:2014-11-08 12:07:39

标签: php oop polymorphism abstract-class

我是面向对象的php的新手。如果HumanClass中的方法testing()中没有函数,我应该将它们声明为抽象吗?

<?php    
    class HumanClass
    {
        private $legs;
        private $hands;

        public function __construct($legs, $hands)
        {
            $this->legs = $legs;
            $this->hands = $hands;          
        }

         public function testing()
         {

         }       
    }

    class StudentClass extends HumanClass
    {
        private $books;


        public function __construct($legs, $hands, $books)
        {
            parent::__construct($legs, $hands);
            $this->books = $books;
        }



         public function testing()
         {
            echo "StudentClass called.";
         }       
    }

    function callClass(HumanClass $c)
    {
        $c->testing();
    } 

    $example = new StudentClass(4, 2, 1);
    callClass($a);  
?>

有可能有这样的东西吗?

echo $a->testing();

而不是另一种方法来调用testing()。

1 个答案:

答案 0 :(得分:0)

鉴于您提供的代码,我们很清楚test()函数应该做什么,而不仅仅是存在让您尝试。答案也将决定基类中的版本是否应作为空函数保留在那里。

还有其他选择,例如派生类首先调用基类(扩展),或者基类不包含抽象或具体的这样的函数,但只包含派生类。选择哪一项取决于知情程序员的决定。