Čo je preťaženie v PHP?
V PHP máme rôzne koncepty objektovo orientovaného programovania, ako je trieda, objekt, zapuzdrenie, polymorfizmus atď. Preťaženie je tiež taký koncept OOP v PHP.
Preťaženie funkcií alebo preťaženie metód je funkcia, ktorá umožňuje vytvoriť niekoľko metód s rovnakým názvom, ktoré sa navzájom líšia v type vstupných parametrov. Je to jednoducho definované ako schopnosť jednej funkcie vykonávať rôzne úlohy.
Definícia preťaženia v jednom riadku: „rovnaký názov, ale rôzne implementácie“
Ako funguje preťaženie v PHP?
Ako vieme, preťaženie metód sa vykonáva vo funkciách. Funkcie teda môžu byť preťažené rôznymi implementáciami na základe argumentov odovzdaných každej funkcii. Napríklad na nájdenie oblasti kruhu, ktorý je pi * r * r, ak je daný polomer, na nájdenie oblasti štvorca, ktorý je stranou * strana, ak je uvedená dĺžka strany, plocha trojuholníka je (základná * výška) / 2 za predpokladu, že je uvedená dĺžka základne a výška atď.
Koncept preťaženia vyžaduje magické metódy.
Magické metódy začínajú znakom __ (dvojité podčiarknutie) a PHP ich automaticky volá. Tiež sú vždy definované vnútri triedy a nie mimo triedy. Rôzne magické metódy sú __get (), __set, __ constru (), __destruct (), __call (), __callStatic (), __isset (), __unset (),
Preťaženie po vykonaní dynamicky vytvára vlastnosti a metódy, ktoré sa spoločne nazývajú entity.
Subjekty sa tiež nazývajú
- vlastnosti: členovia údajov
- metódy: dátové funkcie
Pozrime sa, ako funguje kúzelná metóda pomocou metódy __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);
?>
Vo vyššie uvedenom príklade sme deklarovali triedu s názvom Test, ktorá má súkromné vlastníctvo a metódu __call. Metóde __call sa odovzdajú dva argumenty. V metóde __call sme použili príkaz print (), var_dump argumenty a hodnotu x.
Potom sa vytvorí objekt triedy s názvom obj a pomocou tohto objektu sa vyvolá nedefinovaná metóda, pretože táto metóda neexistuje __call ().
Typy preťaženia v PHP
V PHP existujú dva typy preťaženia a naučme sa každý typ podrobne.
- Preťaženie majetku
- Metóda Preťaženie
1) Preťaženie majetku
Preťaženie majetku vytvára dynamické vlastnosti, keď je objekt nastavený. Táto vlastnosť je spojená s inštanciou triedy a ak táto vlastnosť nie je deklarovaná v rozsahu triedy, považuje sa za preťaženú vlastnosť. Za týmto účelom nemusíte písať žiadny ďalší kód. Nasledujúce magické metódy nám hovoria viac o tom istom.
Nižšie sú uvedené operácie vykonávané s preťaženými vlastnosťami
Preťažené vlastnosti Setter a Getter (pomocou __set () a __get ())
Vyhodnotenie nastavenia preťažených vlastností (pomocou __isset ())
Vrátiť späť také nastavenie vlastností (pomocou __unset ())
Pochopme použitie každej z týchto metód
__set () => sa používa na inicializáciu preťažených vlastností.
__get () => sa používa na načítanie už inicializovaných vlastností
__isset () => sa používa na kontrolu, či je vlastnosť nastavená alebo nie
__unset () => sa používa na zrušenie vlastníctva.
__call () => sa používa na inicializáciu preťažených metód
__callStatic () => sa používa na inicializáciu statických metód
Všetky vyššie uvedené metódy sa používajú v nasledujúcom príklade.
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ýkon
2) Metóda preťaženia
Podobne ako preťaženie majetku, preťaženie metódy vytvára dynamickú metódu, ktorá sa deklaruje mimo rozsahu triedy. A to je možné pomocou magických metód __call () a __callStatic (). Používajú sa na základe odkazu na objekt a statického odkazu.
__call () -> sa používa na volanie preťažených metód v referencii na objekt
__callStatic () -> sa používa na volanie preťažených metód v statickej referencii
Nasledujúci príklad vám pomôže dozvedieť sa viac.
<_?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();
?>
kód:
Výkon:
pravidlá
1) Špecifikátor prístupu k verejnosti sa používa pre metódy preťaženia.
2) Používa sa proces preťaženia, pri ktorom sú prístupné vlastnosti alebo metódy, ktoré nie sú definované v rozsahu triedy, pri vytvorení objektu triedy.
3) Kúzelné metódy sa používajú na preťaženie vlastností alebo metód. Z dvoch magických metód používaných pri metódach preťaženia je najpoužívanejšou metódou metóda __call () v kontexte objektu a menej používanou metódou __callStatic (), ktorá sa používa v statickom kontexte.
Odporúčaný článok
Toto je sprievodca preťažením v PHP. Tu uvádzame príklady a koncepciu preťaženia v PHP s príkladmi. Viac informácií nájdete aj v nasledujúcom článku -
- Čo je to PHP?
- Čo je to PHP Array?
- Základné otázky PHP Interview
- Funkcie reťazca PHP
- Preťaženie v C # | Ako to funguje?
- Úvod do preťaženia v C ++
- Statická metóda v PHP
- Preťaženie a prekonanie v C #
- Metóda Python Magic Metódy, komponenty (príklady)