Co to jest przeciążanie w PHP?

Mamy różne koncepcje programowania obiektowego, takie jak klasa, obiekt, enkapsulacja, polimorfizm itp. W PHP. Przeciążenie jest również taką koncepcją OOP w PHP.

Przeciążenie funkcji lub przeciążenie metody to funkcja pozwalająca na tworzenie kilku metod o tej samej nazwie, które różnią się między sobą rodzajem parametrów wejściowych. Jest to po prostu zdefiniowane jako zdolność jednej funkcji do wykonywania różnych zadań.

Definicja przeciążenia w jednym wierszu: „ta sama nazwa, ale różne implementacje”

Jak działa Przeciążanie w PHP?

Jak wiemy, przeciążanie metod jest wykonywane na funkcjach. W ten sposób funkcje mogą być przeciążone różnymi implementacjami w oparciu o argumenty przekazywane do każdej funkcji. Na przykład, aby znaleźć obszar koła, który jest pi * r * r, pod warunkiem, że podano promień, aby znaleźć obszar kwadratu, który jest bokiem * bokiem, pod warunkiem podania długości boku, pole trójkąta wynosi (podstawa * wysokość) / 2 pod warunkiem, że podana jest długość i wysokość podstawy itd.

Koncepcja przeładowania wymaga magicznych metod.

Metody magiczne zaczynają się od __ (podwójny znak podkreślenia) i są wywoływane automatycznie przez PHP. Te również są zawsze zdefiniowane wewnątrz klasy, a nie poza klasą. Różne magiczne metody to __get (), __set, __ construct (), __destruct (), __call (), __callStatic (), __isset (), __unset (),

Przeładowanie, gdy jest wykonywane, dynamicznie tworzy właściwości i metody, które razem nazywane są bytami.

Jednostki są również nazywane jako

  • właściwości: członkowie danych
  • metody: funkcje danych

Przyjrzyjmy się, jak działa metoda magiczna za pomocą metody __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);
?>

W powyższym przykładzie zadeklarowaliśmy klasę o nazwie Test, która ma własność prywatną i metodę __call. Do argumentu __call przekazywane są dwa argumenty. W metodzie __call zastosowaliśmy instrukcję print (), var_dump argumenty i wartość x są zwracane.

Następnie tworzony jest obiekt klasy o nazwie obj i przy użyciu tego obiektu wywoływana jest niezdefiniowana metoda, ponieważ ta metoda nie istnieje. Zamiast niej wywoływana jest funkcja __call ().

Rodzaje przeładowania w PHP

Istnieją dwa rodzaje przeciążenia w PHP i pozwól nam nauczyć się każdego z nich szczegółowo.

  • Przeciążenie nieruchomości
  • Przeciążenie metody

1) Przeciążenie nieruchomości

Przeciążenie właściwości tworzy właściwości dynamiczne, gdy obiekt jest ustawiony. Ta właściwość jest powiązana z instancją klasy, a jeśli ta właściwość nie zostanie zadeklarowana w obrębie klasy, zostanie uznana za właściwość przeciążoną. W tym celu nie musisz pisać żadnego dodatkowego kodu. Następujące magiczne metody mówią nam więcej o tym samym.

Poniżej wymienione są operacje wykonywane przy przeciążonych właściwościach

Przeciążone właściwości Settera i Gettera (za pomocą __set () i __get ())

Ocena ustawienia przeciążonych właściwości (za pomocą __isset ())

Cofnij ustawienie takich właściwości (używając __unset ())

Pozwól nam zrozumieć zastosowanie każdej z tych metod

__set () => służy do inicjalizacji przeciążonych właściwości.

__get () => służy do pobierania już zainicjowanych właściwości

__isset () => służy do sprawdzenia, czy właściwość jest ustawiona, czy nie

__unset () => służy do rozbrojenia właściwości.

__call () => służy do inicjalizacji przeciążonych metod

__callStatic () => służy do inicjalizacji metod statycznych

Wszystkie powyższe metody razem zastosowano w poniższym przykładzie.

Kod:

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;

Kod:

Wynik

2) Przeciążenie metody

Podobnie jak przeciążanie właściwości, przeciążanie metod tworzy metodę dynamiczną deklarowaną poza zakresem klasy. Jest to możliwe dzięki magicznym metodom __call () i __callStatic (). Są one używane odpowiednio na podstawie odwołania do obiektu i odniesienia do obiektu.

__call () -> służy do wywoływania przeciążonych metod w odwołaniu do obiektu

__callStatic () -> służy do wywoływania przeciążonych metod w odwołaniu statycznym

Poniższy przykład pomoże ci dowiedzieć się więcej.

<_?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();
?>

Kod:

Wynik:

Zasady

1) Specyfikator publicznego dostępu jest używany do metod przeciążania.

2) Stosowany jest proces przeciążenia, w którym można uzyskać dostęp do właściwości lub metod nieokreślonych w zakresie klasy, po utworzeniu obiektu klasy.

3) Magiczne metody są używane do przeciążania właściwości lub metod. Spośród dwóch magicznych metod używanych do przeciążania, najczęściej stosowaną metodą jest metoda __call () w kontekście obiektowym, a rzadziej stosowana jest metoda __callStatic (), która jest używana w kontekście statycznym.

Polecany artykuł

Jest to przewodnik po przeciążaniu w PHP. Tutaj omawiamy typy i koncepcję przeciążenia w PHP z przykładami. Możesz także spojrzeć na następujący artykuł, aby dowiedzieć się więcej -

  1. Co to jest PHP?
  2. Co to jest tablica PHP?
  3. Podstawowe pytania do wywiadu PHP
  4. Funkcje ciągów PHP
  5. Przeciążenie w C # | Jak to działa?
  6. Wprowadzenie do przeciążania w C ++
  7. Metoda statyczna w PHP
  8. Przeciążanie i zastępowanie w C #
  9. Python Magic Method | Metody, komponenty (przykłady)