igorsimdyanov / php8

Примеры к книге "PHP 8. Котеров Д., Симдянов И."
65 stars 16 forks source link

Стр 261 #293

Open Cleverscript opened 7 months ago

Cleverscript commented 7 months ago

Абстрактные классы и методы

"любой класс, содержащий хотя бы один абстрактный метод, сам является абстракт­ным. Действительно, если кто-нибудь создаст объект этого класса и случайно вызо­вет абстрактный метод, то получит ошибку."

По идее же не поучится создать объект т.к класс абстрактный (если указан модификатор класса abstract).

abstract class Cached extends Page
{
    // Формируем уникальный ключ для хранилища
    abstract public function id(mixed $name) : string;
}

будет ошибка:

PHP Fatal error: Uncaught Error: Cannot instantiate abstract class Cached in

Если же не указать что он абстрактный вот так:

class Cached extends Page
{
    // Формируем уникальный ключ для хранилища
    abstract public function id(mixed $name) : string;
}

будет ошибка:

Fatal error: Class Cached contains 1 abstract method and must therefore be declared abstract or implement the remaining methods

То есть дело до вызова метода вообще не дойдет, в обоих случаях.