Що таке перевантаження в PHP?

У нас є різні концепції об'єктно-орієнтованого програмування, такі як клас, об'єкт, інкапсуляція, поліморфізм тощо в PHP. Перевантаження також є такою концепцією ООП в PHP.

Перевантаження функцій або перевантаження методу - це особливість, яка дозволяє створити кілька методів з однаковою назвою, які відрізняються один від одного за типом вхідних параметрів. Він просто визначається як здатність однієї функції виконувати різні завдання.

Визначення перевантаження в одному рядку: "однойменна назва, але різні реалізації"

Як працює перевантаження в PHP?

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

Концепція перевантаження вимагає магічних методів.

Magic Methods починається з __ (подвійне підкреслення) і автоматично викликається 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?
  3. Основні питання інтерв'ю PHP
  4. Функції струнних PHP
  5. Перевантаження в C # | Як це працює?
  6. Вступ до перевантаження в C ++
  7. Статичний метод в PHP
  8. Перевантаження і перезавантаження в C #
  9. Магічний метод Пітона | Методи, компоненти (приклади)