Absztrakt osztályok az OOP-ban PHP-ben

Tegyük fel, hogy van egy User osztálya, amelyből a Employee és a Student osztályok öröklődnek.

Ez esetben feltételezhetjük, hogy a Employee és a Student osztályok objektumait fogjuk létrehozni, de a User osztály objektumait nem, mivel ez az osztály csak az örökösei általános tulajdonságainak és metódusainak csoportosítására szolgál.

Ebben az esetben kényszeríthetjük a User osztály objektumainak létrehozását, hogy Ön vagy egy másik programozzó ne hozhasson létre véletlenül ilyen objektumot.

Erre szolgálnak az úgynevezett absztrakt osztályok. Az absztrakt osztályok olyan osztályok, amelyeket az öröklődésre terveztek. Ugyanakkor az ilyen osztályok objektumait nem lehet létrehozni.

Ahhoz, hogy egy osztályt absztraktként nyilvánítsunk, az osztály deklarálásakor az abstract kulcsszót kell használni:

User.php<?php
  abstract class User
  {
    
  }
?>

Tehát írjuk meg a User absztrakt osztály implementációját. Legyen egy privát name tulajdonsága, valamint getterek és setterek hozzá:

User.php<?php
  abstract class User
  {
    private $name;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function setName($name)
    {
      $this->name = $name;
    }
  }
?>

A User osztály objektumának létrehozására tett kísérlet hibát fog eredményezni:

index.php<?php
  $user = new User; // hibát jelez
?>

Azonban lehetséges lesz örökölni az osztályunktól. Készítsünk egy Employee osztályt, amely öröklődik az absztrakt User osztályunktól:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
  }
?>

Hozzunk létre egy Employee osztályú objektumot - minden működni fog:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');  // szülő metódusa, azaz a User osztályé
  $employee->setSalary(1000);  // saját metódusa, azaz az Employee osztályé
  
  echo $employee->getName();   // kiírja 'john'-t
  echo $employee->getSalary(); // kiírja 1000-et
?>
Задание 1

Készítsen egy Figure absztrakt osztályt, amely egy geometriai alakzatot ábrázol. Örököljön belőle a kör, a téglalap és a négyzet osztálya.