Что такое переопределение в 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();

Выход:

Переопределение с помощью модификаторов доступа

Есть три модификатора доступа.

  1. public: доступно из любой точки программы.
  2. private: доступно только из родительского класса.
  3. Защищено: Доступно из базового класса и производного класса.

Как мы знаем, защищенный метод доступен из базового класса и производного класса, его можно сделать общедоступным в подклассе, но не приватным, поскольку 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 и различные методы вместе с примером кода. Вы также можете посмотреть следующие статьи, чтобы узнать больше -

  1. Основные вопросы PHP для интервью
  2. Преимущества PHP
  3. Карьера в PHP
  4. PHP команды
  5. Руководство по переопределению в JavaScript
  6. Как работает переопределение в C ++?
  7. Переопределение в ООП | Необходимость переопределения метода
  8. Модификаторы доступа в PHP
  9. Переопределение в Java