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:
<?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á:
<?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:
<?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:
<?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:
<?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
?>
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.