Наследяване (Inheritance)

Дефиниране на дъщерен клас


Ако имаме нужда от класове със свойства и методи, подобни на тези от друг клас, е необходимо да приложим принципа за наследяване на класове. Дъщерен клас (клас наследник) можем да създадем с помощта на ключовата дума extends.

Синтаксисът е следния:
childClass.gif

class Child extends Parent {

//Дефиниране на тялото на класа наследник
}


Класът наследник има следните характеристики:
  1. ✴ Автоматично приема всички декларирани член променливи от родителския клас.
  2. ✴ Автоматично приема всички член функции на родителския клас, които ще работят по начина, по който работят и в родителския клас.
Ще създам клас MetalOxides, който ще е дъщерен на клас Metals. За целтаq ще допълня файла phpClass.php, който можете да откриете на адрес: http://dreamlandpoly.blogspot.bg/p/classes-and-objects.html#phpClass. Непосредствено след дефинирането на class Metals, добавяме редовете от скрипта, написан по долу, за да дефинираме дъщерния клас MetalOxides, да декларираме неговите свойства и да дефинираме методите му:
childClass.gif
//Създаване на дъщерен клас
class MetalOxides extends Metals {

   //Деклариране на свойствата
   public $Name;
   
   //Дефиниране на методите
   public function setName ($par){
          $this-> Name = $par;
      }
      
   public function getName(){
          echo $this-> Name . " " . "се образува при непълно горене на натрий в кислородна среда.<br/>";
      } }


Създаване на нов обект в дъщерен клас


Скриптът за създаване на нови обекти на дъщерния клас, за задаване на имена на обектите и за получаване на имената им, ще изглежда така:

childClass.gif
//Създаване на нови обекти на дъщерния клас
$DisodiumOxide= new MetalOxides;

//Задаваме имена на обектите от дъщерния клас
$DisodiumOxide->setName("Динатриев оксид");

//Получаваме имета на обекта от дъщерния клас
$DisodiumOxide->getName();


Класът наследник наследява всички public и protected методи от базовия клас. Те запазват своята функционалност до момента, в който класът наследник ги отмени (това се нарича function overriding).
Вмъкнете редовете от скрипта, записан по-горе, след ред 99 във файла phpClass.php. Съхранете новия файл като inheritance.php.
Съдържанието на файла inheritance.php:
<?php
//inheritance.php
header('Content-Type: text/html; charset=utf-8'); 

class Metals {
//Деклариране на свойствата на класа
 public  $name;        //име на метала
 public $physical_state;      //агрегатно състояние
 public $boiling_temperature; //температура на кипене
 public $melting_temperature; //температура на топене
 
//Деклариране на методите на класа
 public function setName ($par){
          $this->name = $par;
      }
      
  public function getName(){
          echo $this->name ."<br/>";
      }
 public function setPhysicalState ($par){
          $this-> physical_state = $par;
      }
      
       public function getPhysicalState(){
          echo $this-> physical_state ."<br/>";
      }
 public function setBoilingTemperature ($par){
          $this-> boiling_temperature = $par;
      }
      
       public function getBoilingTemperature(){
          echo $this-> boiling_temperature ."<br/>";
      }
 public function setMeltingTemperature ($par){
          $this-> melting_temperature = $par;
      }
      
       public function getMeltingTemperature(){
          echo $this-> melting_temperature ."<br/>";
      }
}


//Създаване на дъщерен клас
class MetalOxides extends Metals {
   //Деклариране на свойствата
   public $Name;
   
   //Дефиниране на методите
   public function setName ($par){
          $this-> Name = $par;
      }
      
   public function getName(){
          echo $this-> Name . " " . "се образува при непълно горене на натрий в кислородна среда.<br/>";
      } 
}


//Създаване на нови обекти на базовия клас
$Sodium = new Metals;   //Създаване на нов обект „Натрий“
$Potassium= new Metals;     //Създаване на нов обект „Калий“
$Zink= new Metals;      //Създаване на нов обект „Цинк“


//Задаваме имена на обектите от базовия клас
$Sodium->setName( "Натрий" );
$Potassium->setName( "Калий" );
$Zink->setName( "Цинк" );

//Задаваме агрегатно състояние на обектите от базовия клас
$Sodium->setPhysicalState("твърдо");
$Potassium->setPhysicalState("твърдо");
$Zink->setPhysicalState("твърдо");

//Задаваме температура на кипене на обектите от базовия клас
$Sodium->setBoilingTemperature("883 °C");
$Potassium->setBoilingTemperature("759 °C");
$Zink->setBoilingTemperature("907 °C");

//Задаваме температура на топене на обектите от базовия клас
$Sodium->setMeltingTemperature("97,79°C");
$Potassium->setMeltingTemperature("63,38°C");
$Zink->setMeltingTemperature("419,53°C");

//Получаваме имената на обектите от базовия клас
echo 'Имената на обектите са: ' . '<br>';
$Sodium->getName();
$Potassium->getName( );
$Zink->getName();

//Получаваме агрегатното състояние на обектите от базовия клас
echo 'Агрегатните състояния на обектите са: ' . '<br>';
$Sodium->getPhysicalState();
$Potassium->getPhysicalState();
$Zink->getPhysicalState();

//Получаваме температурата на кипене на обектите от базовия клас
echo 'Температурите на кипене на обектите са: ' . '<br>';
$Sodium->getBoilingTemperature();
$Potassium->getBoilingTemperature();
$Zink->getBoilingTemperature();

//Получаваме температурата на топене на обектите от базовия клас
echo 'Температурите на топене на обектите са: ' . '<br>';
$Sodium->getMeltingTemperature();
$Potassium->getMeltingTemperature();
$Zink->getMeltingTemperature();

echo "<br><br>";
//Създаване на нови обекти на дъщерния клас
$DisodiumOxide= new MetalOxides;

//Задаваме имена на обектите от дъщерния клас
$DisodiumOxide->setName("Динатриев оксид");

//Получаваме имета на обекта от дъщерния клас
$DisodiumOxide->getName();

?>
Резултатът в браузъра:

inheritance-php.png

Ако имате желание, може да си поиграете, преработвайки файл constructor.php (http://dreamlandpoly.blogspot.bg/p/magic-methods.html#constructor), и да създадете нов обект от дъщерния клас с помощта на метод конструктор.


Няма коментари:

Публикуване на коментар