Что такое перегрузка в PHP?
У нас есть разные концепции объектно-ориентированного программирования, такие как класс, объект, инкапсуляция, полиморфизм и т. Д. В PHP. Перегрузка также является такой концепцией ООП в PHP.
Перегрузка функций или перегрузка методов - это функция, которая позволяет создавать несколько методов с одинаковыми именами, которые отличаются друг от друга типом входных параметров. Это просто определяется как способность одной функции выполнять разные задачи.
Определение перегрузки в одной строке: «одно и то же имя, но разные реализации»
Как перегрузка работает в PHP?
Как известно, перегрузка метода выполняется на функции. Таким образом, функции могут быть перегружены различными реализациями на основе аргументов, передаваемых каждой функции. Например, чтобы найти площадь круга, которая равна pi * r * r, при условии заданного радиуса, чтобы найти площадь квадрата, которая является стороной * сторона, при условии, что задана длина стороны, площадь треугольника равна (основание * высота) / 2 при условии указания базовой длины, высоты и т. Д.
Концепция перегрузки требует магических методов.
Магические методы начинаются с __ (двойное подчеркивание) и автоматически вызываются PHP. Также они всегда определены внутри класса, а не вне класса. Различные магические методы: __get (), __set, __ construct (), __destruct (), __call (), __callStatic (), __isset (), __unset (),
При перегрузке динамически создаются свойства и методы, которые вместе называются объектами.
Объекты также называются
- свойства: члены данных
- методы: функции данных
Давайте посмотрим, как работает магический метод с использованием метода __call ()
<_?phpclass 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 () -> используется для вызова перегруженных методов в статической ссылке
Следующий пример поможет вам узнать больше.
<_?phpclass 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 с примерами. Вы также можете посмотреть следующую статью, чтобы узнать больше -
- Что такое PHP?
- Что такое PHP Array?
- Основные вопросы PHP для интервью
- Строковые функции PHP
- Перегрузка в C # | Как это устроено?
- Введение в перегрузку в C ++
- Статический метод в PHP
- Перегрузка и переопределение в C #
- Магический метод питона | Методы, компоненты (примеры)