Что такое абстрактный класс в PHP?
Как это можно использовать?
php
oop
abstract-class
удайа
источник
источник
Ответы:
Абстрактный класс - это класс, который содержит по крайней мере один абстрактный метод, который представляет собой метод без какого-либо фактического кода в нем, только имя и параметры, и который отмечен как «абстрактный».
Цель этого - предоставить своего рода шаблон для наследования и заставить наследующий класс реализовать абстрактные методы.
Таким образом, абстрактный класс представляет собой нечто среднее между обычным классом и чистым интерфейсом. Также интерфейсы являются частным случаем абстрактных классов, где ВСЕ методы абстрактны.
См. Этот раздел руководства PHP для получения дополнительной информации.
источник
1. Невозможно создать экземпляр абстрактного класса : классы, определенные как абстрактные, не могут быть созданы, и любой класс, содержащий хотя бы один абстрактный метод, также должен быть абстрактным.
Пример ниже:
2. Любой класс, содержащий хотя бы один абстрактный метод, также должен быть абстрактным : абстрактный класс может иметь абстрактные и не абстрактные методы, но он должен содержать хотя бы один абстрактный метод. Если у класса есть хотя бы один абстрактный метод, тогда класс должен быть объявлен абстрактным.
Пример ниже:
3. Абстрактный метод не может содержать тело : методы, определенные как абстрактные, просто объявляют подпись метода - они не могут определять реализацию. Но неабстрактный метод может определять реализацию.
4. При наследовании от абстрактного класса все методы, помеченные как абстрактные в объявлении родительского класса, должны быть определены потомком : если вы наследуете абстрактный класс, вы должны предоставить реализации для всех абстрактных методов в нем.
5. Такая же (или менее ограниченная) видимость : при наследовании от абстрактного класса все методы, отмеченные как абстрактные в объявлении родительского класса, должны быть определены потомком; кроме того, эти методы должны быть определены с такой же (или менее ограниченной) видимостью. Например, если абстрактный метод определен как защищенный, реализация функции должна быть определена как защищенная или общедоступная, но не закрытая.
6. Сигнатуры абстрактных методов должны совпадать : при наследовании от абстрактного класса все методы, отмеченные как абстрактные в объявлении родительского класса, должны быть определены потомком; сигнатуры методов должны совпадать, т. Е. Подсказки типа и количество требуемых аргументы должны быть одинаковыми. Например, если дочерний класс определяет необязательный аргумент, в отличие от сигнатуры абстрактного метода, в сигнатуре нет конфликта.
7. Абстрактный класс не поддерживает множественное наследование : абстрактный класс может расширять другой абстрактный класс, абстрактный класс может обеспечивать реализацию интерфейса. Но он не поддерживает множественное наследование.
приведенный ниже пример вызовет фатальную ошибку: класс 'лошадь' не найден
источник
Существует хорошее объяснение того , что здесь .
источник
Абстрактный класс
1. Содержит абстрактный метод
2. Не может быть инициализирован напрямую
3. Невозможно создать объект абстрактного класса
4. Используется только для целей наследования
Абстрактный метод
1. Не может содержать тело
2. Не может быть определен как частный
3. Дочерние классы должны определять методы, объявленные в абстрактном классе
Пример кода:
Вывод:
источник
источник
Абстрактные классы - это те классы, которые нельзя инициализировать напрямую. Или, другими словами, мы можем сказать, что абстрактные классы - это те классы, объект которых нельзя создать напрямую. В PHP абстрактные классы игнорируются ключевым словом abstract .
Также, чтобы стать одним абстрактным классом, один метод класса должен быть абстрактным.
Подробную информацию об абстрактном классе вы можете найти в моем блоге об абстрактном классе в PHP .
источник
Абстрактный класс похож на обычный класс, он содержит переменные, он содержит защищенные переменные, функции, он содержит конструктор, только одно отличается: он содержит абстрактный метод.
Абстрактный метод означает пустой метод без определения, поэтому только одно различие в абстрактном классе мы не можем создать объект абстрактного класса.
Abstract должен содержать абстрактный метод, и эти методы должны быть определены в его наследующем классе.
источник