2014-11-08 33 views
-1

我是面向對象的php的新手。如果在HumanClass的methods()方法中沒有函數,我應該聲明它們是抽象的嗎?在PHP中使用多態的正確方法?

<?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(); 

而不是另一種方法來調用測試()。

+0

這是一個錯誤? '$ this-> legs = legs;'不帶'$'和其他一些 – Ghost 2014-11-08 12:11:14

+0

@Ghos:yup sry。 – John 2014-11-08 12:27:20

+0

@約翰:什麼阻止你檢查PHP文檔*第一*? – 2014-11-08 12:38:31

回答

0

考慮到你給出的代碼,它遠不清楚testing()函數應該做些什麼,而不是僅僅存在你嘗試的東西。對此的回答也將決定基類中的版本是否應該保留爲空函數。

還有其他的選擇,例如,派生類首先調用基類(擴展),或者基類不包含抽象或具體的這樣的函數,但只有派生類的功能。由知情程序員決定選擇哪一種。

相關問題