Co je přetížení v PHP?

V PHP máme různé koncepty objektově orientovaného programování, jako je třída, objekt, zapouzdření, polymorfismus atd. Přetížení je také koncept OOP v PHP.

Přetížení funkce nebo přetížení metody je funkce, která umožňuje vytvořit několik metod se stejným názvem, které se od sebe liší typem vstupních parametrů. Jednoduše je definována jako schopnost jedné funkce provádět různé úkoly.

Definice přetížení na jednom řádku: „stejný název, ale různé implementace“

Jak přetížení funguje v PHP?

Jak víme, přetížení metod se provádí na funkcích. Funkce tak mohou být přetíženy různými implementacemi na základě argumentů předaných každé funkci. Například pro nalezení oblasti kruhu, který je pi * r * r za předpokladu poloměru, pro nalezení oblasti čtverce, který je stranou * strana, za předpokladu, že je uvedena délka strany, je plocha trojúhelníku (základní * výška) / 2 za předpokladu, že je dána délka základny a výška atd.

Koncept přetížení vyžaduje magické metody.

Kouzelné metody začínají znakem __ (dvojité podtržítko) a PHP je automaticky volá. Také jsou vždy definovány uvnitř třídy a ne mimo třídu. Různé metody magie jsou __get (), __set, __ constru (), __destruct (), __call (), __callStatic (), __isset (), __unset (),

Přetížení při provádění dynamicky vytváří vlastnosti a metody, které se společně nazývají entity.

Tyto entity se také nazývají jako

  • vlastnosti: datové členy
  • metody: datové funkce

Podívejme se, jak magická metoda funguje 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);
?>

Ve výše uvedeném příkladu jsme deklarovali třídu nazvanou Test, která má soukromý majetek a metodu __call. Metodě __call jsou předány dva argumenty. V rámci metody __call jsme použili příkaz print (), var_dump argumenty a hodnotu x.

Poté je vytvořen objekt třídy s názvem obj a pomocí tohoto objektu je volána nedefinovaná metoda, protože tato metoda neexistuje __call ().

Typy přetížení v PHP

V PHP existují dva typy přetížení a naučme se každý typ podrobně.

  • Přetížení vlastnosti
  • Metoda přetížení

1) Přetížení majetku

Přetížení vlastností vytváří dynamické vlastnosti, když je objekt nastaven. Tato vlastnost je spojena s instancí třídy a pokud tato vlastnost není deklarována v rozsahu třídy, je považována za přetíženou vlastnost. K tomu nemusíte psát žádný zvláštní kód. Následující magické metody nám říkají více o stejném.

Níže jsou uvedeny operace prováděné s přetíženými vlastnostmi

Přetížené vlastnosti Setter a Getter (pomocí __set () a __get ())

Vyhodnocení nastavení přetížených vlastností (pomocí __isset ())

Zrušení nastavení těchto vlastností (pomocí __unset ())

Pochopme použití každé z těchto metod

__set () => se používá k inicializaci přetížených vlastností.

__get () => se používá k načtení již inicializovaných vlastností

__isset () => se používá ke kontrole, zda je vlastnost nastavena nebo ne

__unset () => se používá k deaktivaci vlastnosti.

__call () => se používá k inicializaci přetížených metod

__callStatic () => se používá k inicializaci statických metod

Všechny výše uvedené metody jsou použity v následujícím příkladu.

Kód:

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;

Kód:

Výstup

2) Přetížení metody

Stejně jako přetížení vlastnosti vytváří metoda přetížení dynamickou metodu, která je deklarována mimo rozsah třídy. A to je možné pomocí magických metod __call () a __callStatic (). Používají se na základě odkazu na objekt a statického odkazu.

__call () -> se používá pro volání přetížených metod v odkazu na objekt

__callStatic () -> se používá pro volání přetížených metod ve statickém odkazu

Následující příklad vám pomůže dozvědět se více.

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

Kód:

Výstup:

Pravidla

1) Pro metody přetížení se používá specifikátor veřejného přístupu.

2) Používá se proces přetížení, při kterém jsou přístupné vlastnosti nebo metody, které nejsou definovány v rozsahu třídy, při vytváření předmětu třídy.

3) K přetěžování vlastností nebo metod se používají magické metody. Ze dvou magických metod používaných při přetížení je nejpoužívanější metodou __call () v kontextu objektu a méně používanou metodou __callStatic (), která se používá ve statickém kontextu.

Doporučený článek

Toto je průvodce přetížením v PHP. Zde diskutujeme typy a koncept přetížení v PHP s příklady. Další informace naleznete také v následujícím článku -

  1. Co je PHP?
  2. Co je PHP Array?
  3. Základní otázky PHP Interview
  4. Funkce PHP String
  5. Přetížení v C # | Jak to funguje?
  6. Úvod do přetížení v C ++
  7. Statická metoda v PHP
  8. Přetížení a přemostění v C #
  9. Metoda Python Magic | Metody, komponenty (příklady)

Kategorie: