Dalej bawimy się w MVC i programowanie obiektowe. Poznajemy czym są klasy abstrakcyjne i metody abstrakcyjne. Do dzieła.

Zacznijmy od utworzenia pliku helloname.php:

<?php 
echo "<h1>Hello name page</h1>";
echo "<br>";
echo @"Hello $name";

Mamy tutaj ciekawy error suppress operator, zatem bez zmiennej name nie wyskoczą nam żadne błędy. Teraz teoria.

Klasa abstrakcyjna to klasa najwyższego rzędu, z której się tylko dziedziczy. Klasa abstrakcyjna nie może utworzyć obiektu.

Klasa abstrakcyjna może posiadać metody abstrakcyjne, ale bez implementacji.

<?php 

abstract class InvokableController {
    abstract public function __invoke($path);
    
}

Takiego obiektu nie możemy utworzyć, ale możemy dziedziczyć z tej klasy, tylko musimy zaimplementować jej abstrakcyjną metodę __invoke:

<?php 

abstract class InvokableController {
    abstract public function __invoke($path);
    
}

class HomeController extends InvokableController {

    public function __invoke($path){
        require __DIR__ . "/$path.php";
    }
}

$invokable = new HomeController();
$invokable("helloname");

Klasy abstrakcyjne poznamy lepiej w następnych odcinkach, na razie niewiele różnią się od interfejsów, ale to się wkrótce zmieni.