Classes abstratas em OOP em PHP
Suponha que você tenha uma classe User, e
herdando dela estão as classes Employee e
Student.
Presume-se que você irá criar
objetos das classes Employee e Student,
mas objetos da classe User - não irá,
pois esta classe é usada apenas para
agrupar propriedades e métodos comuns dos seus
herdeiros.
Neste caso, você pode forçar a proibição
de criar objetos da classe User, para que
você ou outro programador em algum lugar não os crie acidentalmente.
Para isso existem as chamadas classes abstratas. Classes abstratas são classes destinadas à herança. Além disso, objetos de tais classes não podem ser criados.
Para declarar uma classe como abstrata,
é necessário escrever a palavra-chave
abstract na sua declaração:
<?php
abstract class User
{
}
?>
Então, vamos escrever a implementação da
classe abstrata User. Suponha que ela tenha uma propriedade
privada name, e também getters e setters
para ela:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
A tentativa de criar um objeto da classe User
causará um erro:
<?php
$user = new User; // causará um erro
?>
Mas herdar da nossa classe será
possível. Vamos criar a classe Employee, que
herdará da nossa classe abstrata
User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Vamos criar um objeto da classe Employee -
tudo funcionará:
<?php
$employee = new Employee;
$employee->setName('john'); // método do pai, ou seja, da classe User
$employee->setSalary(1000); // método próprio, ou seja, da classe Employee
echo $employee->getName(); // exibirá 'john'
echo $employee->getSalary(); // exibirá 1000
?>
Crie uma classe abstrata Figure,
que representa uma figura geométrica.
Deixe que classes para o círculo, retângulo e quadrado herdem dela.