Что такое переопределение в PHP?
Переопределение - это концепция объектно-ориентированного программирования, которая похожа на такие концепции, как класс, объект, инкапсуляция, полиморфизм, перегрузка и т. Д. В PHP. Переопределение функций и классов выполняется при создании метода в производном классе, который совпадает с методом в базовом классе или родительском классе. Оба этих метода имеют одинаковое имя и одинаковое количество аргументов.
Как работает переопределение?
- Переопределение - это концепция, в которой производный класс базового класса выполняет то же действие, что и базовый класс. Это переопределение может быть для методов или классов. Если это переопределение метода, то имя метода и параметры, спецификатор доступа, будет таким же, как и у метода родительского класса. Если в реализации метода в подклассе, производном от базового класса, не обнаружено никаких изменений, то в то время говорится, что метод подкласса переопределил метод базового класса.
- Предположим, есть класс Person с собственными свойствами данных и методами. Это родительский или базовый класс Person с методом speak (). Теперь есть еще один класс, называемый Employee, который расширяет класс Person. Теперь этот класс Employee имеет свои собственные свойства и методы данных, а также метод, аналогичный методу родительского класса eg.speak ().
- Этот метод speaks () присутствует в базовом классе, а также в производном классе.
- Теперь, что происходит, когда создается экземпляр класса или когда создается объект, какой из методов speak () будет выполнен, это означает, что выполнение базового класса или говорить о производном классе зависит от объекта класса называется.
- Другими словами, если создается объект класса Person, то вызывается метод speak () класса Person, и поэтому он выполняется. Но если объект класса Employee создан, то будет выполнен метод speak () производного класса, который переопределяет класс speak () родительского класса.
- И вот как переопределение происходит с примером
- В приведенном ниже примере есть два класса, базовый класс и производный класс. Производный класс расширяет базовый класс. Эти классы инициируются и создаются два объекта $ obj1 и $ obj2. $ obj1 является объектом BaseClass, а $ obj2 является объектом производного класса. Эти объекты дополнительно вызывают методы, объявленные в их соответствующих классах.
- Здесь вы заметите, что базовый класс и производный класс имеют один и тот же метод ABC (). При выполнении этой программы вы заметите, что метод ABC () переопределил метод базового класса ABC ().
Пример переопределения метода
class BaseClass (
public function ABC() (
echo "
In the base class";
)
)
class DerivedClass extends BaseClass (
// override the method ABC() of base class
public function ABC() (
echo "
In the derived class";
)
)
$obj1 = new BaseClass;
$obj1->ABC();
$obj2 = new DerivedClass;
$obj2->ABC();
Выход:
Переопределение с помощью модификаторов доступа
Есть три модификатора доступа.
- public: доступно из любой точки программы.
- private: доступно только из родительского класса.
- Защищено: Доступно из базового класса и производного класса.
Как мы знаем, защищенный метод доступен из базового класса и производного класса, его можно сделать общедоступным в подклассе, но не приватным, поскольку private доступен только в родительском классе. Также, если метод класса имеет спецификатор доступа как открытый, тогда переопределяющий метод в производном классе не может быть объявлен как закрытый и защищенный
Пример переопределения метода с использованием модификаторов доступа
class BaseClass (
private function ABC() (
echo "
In the base class Method : ABC";
)
protected function XYZ() (
echo "
In the base class Method : XYZ";
)
)
class DerivedClass extends BaseClass (
// overriding with public for wider accessibility
public function ABC() (
echo "
In the derived class Method : ABC";
)
// overriding method
// with more accessibility
public function XYZ() (
echo "
In the derived class Method : XYZ";
)
)
//$obj1 = new BaseClass;
//$obj1->ABC(); //throws fatal error
//$obj1->XYZ(); //throws fatal error
$obj2 = new DerivedClass;
$obj2->ABC();
$obj2->XYZ();
выход:
Переопределение с помощью последнего ключевого слова
Последнее ключевое слово используется для классов и методов. Методы и классы, а не переменные могут быть переопределены.
Окончательный метод переопределения
Когда метод или класс объявляются как final, переопределение этого метода или класса не может быть выполнено, и наследование с классом невозможно.
Пример переопределения метода с использованием окончательного ключевого слова
class BaseClass (
// Final method – display
// this cannot be overridden in base class
final function display() (
echo "
In the Base class display function";
)
/// method - ABC
function ABC() (
echo "
In the Base cLass ABC function";
)
)
class DerivedClass extends BaseClass (
function ABC() (
echo "
In the Derived class ABC function";
)
)
$obj1 = new DerivedClass;
$obj1->display();
$obj1->ABC();
Выход:
Финальный класс
Класс, объявленный как final, не может быть унаследован. У финального класса также есть финальный метод вместе с другими методами. Но поскольку сам класс объявлен как финальный, нет смысла объявлять конечный метод в конечном классе.
Пример переопределения класса с использованием окончательного ключевого слова
// class declared as final cannot be overridden
final class BaseClass (
// method - ABC
function ABC() (
echo "
In the BaseClass Method ABC function";
)
// Final method - display
function display() (
echo "
In the BaseClass Method display function";
)
)
// here you cannot extend the base class
// as the base class is declared as final
$obj1 = new BaseClass;
$obj1->display();
$obj1->ABC();
Выход:
Рекомендуемые статьи
Это руководство по переопределению в PHP. Здесь мы обсуждаем то, что переопределяет и работает PHP и различные методы вместе с примером кода. Вы также можете посмотреть следующие статьи, чтобы узнать больше -
- Основные вопросы PHP для интервью
- Преимущества PHP
- Карьера в PHP
- PHP команды
- Руководство по переопределению в JavaScript
- Как работает переопределение в C ++?
- Переопределение в ООП | Необходимость переопределения метода
- Модификаторы доступа в PHP
- Переопределение в Java