2016-12-14 1 views
0

Я создал Person класс, а затем расширил его до Student класса. Когда я вызываю метод на объекте Student, он работает не так, как ожидалось.Класс Inheritance не работает нормально в PHP

Вот мой код

class Person{ 
    static public $IsAlive; 
    public $FirstName; 
    public $LastName; 
    public $Gender; 
    public $Age; 
    static public $total_person = 1; 
    static public $type; 

    function __construct($FirstName,$LastName,$Gender,$Age,$IsAlive,$type=""){ 
     self::$IsAlive = $IsAlive; 
     if(self::$IsAlive === TRUE){ 
      echo "<strong>Person Number#" . self::$total_person++ . "</strong> details are given below: <br />"; 
      $this->FirstName = $FirstName; 
      $this->LastName = $LastName; 
      $this->Gender = $Gender; 
      $this->Age = $Age; 
      self::$type = $type; 
     }else{ 
      echo "This Person is not longer available <br />"; 
     } 
    } 
    function PersonDetail(){ 
     if(self::$IsAlive === TRUE){ 
      echo "Person Name: " . $this->FirstName . " " . $this->LastName . "<br />"; 
      echo "Person Gender: " . $this->Gender . "<br />"; 
      echo "Age: " . $this->Age; 
     } 
    } 

} 
class Student extends Person{ 
    public $standard = "ABC"; 
    public $subjects = "ABC"; 
    public $fee = "123"; 
    function StudentDetail(){ 
     if(parent::$type === "Student"){ 
      return parent::PersonDetail(); 
      echo "Education Standard: " . $this->standard; 
      echo "Subjects: " . $this->subjects; 
      echo "Fee: " . $this->fee; 
      echo parent::$type; 
     } 
    } 
} 

$Hamza = new Student("Muhammad Hamza","Nisar","Male","22 years old",TRUE,"Student"); 
$Hamza->StudentDetail(); 

Это печать PersonDetail() только, но не печатает полную информацию как стандарт образования, предметы и плата.

Вот мой выход

Person Number#1 details are given below: 
Person Name: Muhammad Hamza Nisar 
Person Gender: Male 
Age: 22 years old 

мне нужно, чтобы увидеть StudentDetail() выход под ним, а также. Что случилось и как это исправить?

+1

Можете ли вы попытаться установить return parent :: PersonDetail(); на последней строке функции StudentDetail() или удалить возврат? – dimis283

ответ

3

Если вы положили инструкцию return внутри своей функции (или метода), PHP не будет продолжать выполнение после этого пункта (большую часть времени) *. Итак, когда выполняется следующий код (взятый из вашего вопроса), он прекращается после вызова return parent::PersonDetail();.

function StudentDetail() { 
    if(parent::$type === "Student") { 
     return parent::PersonDetail(); 
     echo "Education Standard: " . $this->standard; 
     echo "Subjects: " . $this->subjects; 
     echo "Fee: " . $this->fee; 
     echo parent::$type; 
    } 
} 

Поскольку PersonDetail() метод отображает саму информацию, вам не нужно, чтобы вернуть его значение. Достаточно просто назвать его в этом случае:

function StudentDetail() { 
    if(parent::$type === "Student") { 
     parent::PersonDetail(); // this will echo parent output 

     // and this code will still be executed 
     echo "Education Standard: " . $this->standard; 
     echo "Subjects: " . $this->subjects; 
     echo "Fee: " . $this->fee; 
     echo parent::$type; 
    } 
} 

В случае этого вопроса это не имеет значения, но иногда выполнение продолжается даже после того, как функция возвращается, например, в finally пункте

+0

Спасибо, что работа прекрасна –