Что такое перегрузка в PHP?

У нас есть разные концепции объектно-ориентированного программирования, такие как класс, объект, инкапсуляция, полиморфизм и т. Д. В PHP. Перегрузка также является такой концепцией ООП в PHP.

Перегрузка функций или перегрузка методов - это функция, которая позволяет создавать несколько методов с одинаковыми именами, которые отличаются друг от друга типом входных параметров. Это просто определяется как способность одной функции выполнять разные задачи.

Определение перегрузки в одной строке: «одно и то же имя, но разные реализации»

Как перегрузка работает в PHP?

Как известно, перегрузка метода выполняется на функции. Таким образом, функции могут быть перегружены различными реализациями на основе аргументов, передаваемых каждой функции. Например, чтобы найти площадь круга, которая равна pi * r * r, при условии заданного радиуса, чтобы найти площадь квадрата, которая является стороной * сторона, при условии, что задана длина стороны, площадь треугольника равна (основание * высота) / 2 при условии указания базовой длины, высоты и т. Д.

Концепция перегрузки требует магических методов.

Магические методы начинаются с __ (двойное подчеркивание) и автоматически вызываются PHP. Также они всегда определены внутри класса, а не вне класса. Различные магические методы: __get (), __set, __ construct (), __destruct (), __call (), __callStatic (), __isset (), __unset (),

При перегрузке динамически создаются свойства и методы, которые вместе называются объектами.

Объекты также называются

  • свойства: члены данных
  • методы: функции данных

Давайте посмотрим, как работает магический метод с использованием метода __call ()

<_?php
class Test(
private $a = array('one', 'two', 'three');
public function__call($method, $args) (
print "Method $method called:\n";
echo " ";
print_r($args);
return $this->a;
)
)
$obj = new Test();
$a = obj->anyMethod(1, 2, 3);
var_dump($a);
?>

 class Test(
private $a = array('one', 'two', 'three');
public function__call($method, $args) (
print "Method $method called:\n";
echo " ";
print_r($args);
return $this->a;
)
)
$obj = new Test();
$a = obj->anyMethod(1, 2, 3);
var_dump($a);
?>

В приведенном выше примере мы объявили класс с именем Test, который имеет закрытое свойство и метод __call. Два аргумента передаются методу __call. Внутри метода __call мы использовали оператор print (), в var_dump возвращаются аргументы и значение x.

Затем создается объект класса с именем obj, и с использованием этого объекта вызывается неопределенный метод, поскольку этот метод не существует, вместо этого вызывается __call ().

Типы перегрузки в PHP

В PHP есть два типа перегрузки, и давайте изучим каждый тип подробно.

  • Перегрузка недвижимости
  • Перегрузка метода

1) Перегрузка имущества

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

Ниже упоминаются операции, выполняемые с перегруженными свойствами.

Перегруженные свойства Setter и Getter (используя __set () и __get ())

Оценка параметров перегруженных свойств (с помощью __isset ())

Отменить настройку таких свойств (используя __unset ())

Давайте разберемся в использовании каждого из этих методов

__set () => используется для инициализации перегруженных свойств.

__get () => используется для извлечения уже инициализированных свойств

__isset () => используется для проверки, установлено свойство или нет

__unset () => используется для сброса свойства.

__call () => используется для инициализации перегруженных методов

__callStatic () => используется для инициализации статических методов

Все вышеперечисленные методы вместе используются в следующем примере.

Код:

class PropertyOverloading (
public $details = array();
//declaring private property
private $j=20;
// setter operation
public function __set($name, $value) (
echo "
". " In the Setting operation. Set '$name = $value'";
$this->details($name) = $value;
)
// getter operation
public function __get($name) (
echo "
". " In the Getting Operation. Get '$name = '";
return $this->details($name) . '
';
)
// isset operation
public function __isset($name) (
echo "
". " In the isset Operation. isset '$name' ?";
return isset($this->details($name));
)
// unset operation
public function __unset($name) (
echo "
". " In the unset Operation. unset '$name' ";
unset($this->details($name));
)
// returning private property value
public function getPrivateProperty() (
return "
". " j = ".$this->j;
)
)
// creating object of class PropertyOverloading
// setter and getter methods are called
$obj = new PropertyOverloading();
$obj->x = 10;
echo $obj->x;
//call isset method
var_dump(isset($obj->x));
//call unset method
unset($obj->x);
//check whether object x is unset or not
var_dump(isset($obj->x));
//getting method to access the private property
echo "
". $obj-> getPrivateProperty();
//calling directly the private property
// throws error
echo "
accessing the private property, throws error";
echo "
".$obj->j;

Код:

Выход

2) Перегрузка метода

Как и перегрузка свойства, перегрузка метода создает динамический метод, который объявлен вне экстента класса. И это возможно с помощью магических методов __call () и __callStatic (). Они используются на основе ссылки на объект и статической ссылки соответственно.

__call () -> используется для вызова перегруженных методов в ссылке на объект

__callStatic () -> используется для вызова перегруженных методов в статической ссылке

Следующий пример поможет вам узнать больше.

<_?php
class MethodOverloading
(
public function __call($name, $param)(
echo "--With object reference
";
)
public static function __callStatic($name, $param)(
echo "-----With static reference
";
)
)
// creating object of class MethodOverloading
$obj = new MethodOverloading;
echo "Method Overloading
";
// using the object reference
$obj->DemoTest();
// using the static reference
MethodOverloading::DemoTest();
?>

Код:

Выход:

правила

1) Спецификатор открытого доступа используется для методов перегрузки.

2) Процесс перегрузки используется, когда к свойствам или методам, не определенным в пределах класса, можно получить доступ при создании объекта класса.

3) Магические методы используются для перегрузки свойств или методов. Из двух магических методов, используемых для перегрузки методов, наиболее используемый метод - это метод __call () в контексте объекта, и менее используемый - метод __callStatic (), который используется в статическом контексте.

Рекомендуемая статья

Это руководство по перегрузке в PHP. Здесь мы обсуждаем типы и концепцию перегрузки в PHP с примерами. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Что такое PHP?
  2. Что такое PHP Array?
  3. Основные вопросы PHP для интервью
  4. Строковые функции PHP
  5. Перегрузка в C # | Как это устроено?
  6. Введение в перегрузку в C ++
  7. Статический метод в PHP
  8. Перегрузка и переопределение в C #
  9. Магический метод питона | Методы, компоненты (примеры)