Що таке перевантаження в PHP?
У нас є різні концепції об'єктно-орієнтованого програмування, такі як клас, об'єкт, інкапсуляція, поліморфізм тощо в PHP. Перевантаження також є такою концепцією ООП в PHP.
Перевантаження функцій або перевантаження методу - це особливість, яка дозволяє створити кілька методів з однаковою назвою, які відрізняються один від одного за типом вхідних параметрів. Він просто визначається як здатність однієї функції виконувати різні завдання.
Визначення перевантаження в одному рядку: "однойменна назва, але різні реалізації"
Як працює перевантаження в PHP?
Як ми знаємо, перевантаження методу виконується на функції. Таким чином, функції можуть бути перевантажені різними реалізаціями на основі аргументів, переданих кожній функції. Наприклад, щоб знайти площу кола, яка pi * r * r, заданий радіус, знайти площу квадрата, яка сторона * сторона, якщо задана довжина сторони, площа трикутника (основа * висота) / 2 за умови заданої довжини основи та висоти тощо.
Концепція перевантаження вимагає магічних методів.
Magic Methods починається з __ (подвійне підкреслення) і автоматично викликається 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?
- Основні питання інтерв'ю PHP
- Функції струнних PHP
- Перевантаження в C # | Як це працює?
- Вступ до перевантаження в C ++
- Статичний метод в PHP
- Перевантаження і перезавантаження в C #
- Магічний метод Пітона | Методи, компоненти (приклади)