Používání OOP
Abstraktní třídy
- klíčové slovo
abstract
- sdílení kódu
- nelze instanciovat
- v potomcích abstraktní třídy obvykle různé implementace operací
- třída s alespoň jednou abstraktní metodou musí být sama abstraktní
- může obsahovat i atributy
Abstraktní třídy
abstract class Image {
abstract function display();
}
class Jpeg extends Image {
function display() { ... }
}
Rozhraní
- dohoda splňovat zadané požadvky
- interface segregation principle (part of SOLID)
- PHP
- klíčové slovo
interface
- obsahuje hlavičky metod a konstanty
- rozhraní mohou dědit
- třídy mohou implementovat jedno nebo více rozhraní pomocí klíčového slova
implements
- Predefinované rozhraní
- klíčové slovo
Rozhraní
interface Filesystem {
function mkdir($path);
function rmdir($path);
}
class LocalFilesystem implements Filesystem {
function mkdir($path) { ... }
function rmdir($path) { ... }
}
Traity
- klíčové slovo
trait
, použitíuse
uvnitř třídy - náhrada za vícenásobnou dědičnost
- kdekoliv znovupoužitelný kód
- přidává kód i do spolu nesouvisejících tříd
- může pracovat s
$this
cílové třídy
Traity
trait CRUD {
public function create(...) {...}
}
class Entity {
use CRUD;
}
Late static binding
self
- v čase čtení kódu (compile time)
static
- v čase běhu kódu (runtime)
Late static binding
class Attachment {
const TYPE = 'application/octet-stream';
protected static $sequence = 0;
public function __construct()
{
$this->id = ++self::$sequence;
$this->type = static::TYPE;
}
}
Late static binding
class Text extends Attachment
{
const TYPE = 'text/plain';
}
class JpegImage extends Attachment
{
const TYPE = 'image/jpeg';
}