Какво е претоварване в PHP?

Имаме различни концепции на обектно-ориентирано програмиране като клас, обект, капсулация, полиморфизъм и т.н. в PHP. Претоварването също е такава концепция за OOP в 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 (), a 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. Магически метод на Python | Методи, компоненти (примери)