Kaj je preobremenitev v PHP?

V PHP imamo različne koncepte objektno usmerjenega programiranja, kot so razred, objekt, kapsulacija, polimorfizem itd. Takšen koncept OOP v PHP je tudi preobremenitev.

Preobremenitev s funkcijo ali preobremenitev metode je funkcija, ki omogoča ustvarjanje več metod z istim imenom, ki se med seboj razlikujejo po vrsti vhodnih parametrov. Preprosto je definirana kot zmožnost ene funkcije za izvajanje različnih nalog.

Opredelitev preobremenitve v eni vrstici: "isto ime, vendar različne izvedbe"

Kako preobremenitev deluje v PHP-ju?

Kot vemo, se preobremenitev metode izvaja na funkcijah. Tako so funkcije lahko preobremenjene z različnimi izvedbami na podlagi argumentov, poslanih vsaki funkciji. Na primer, da bi našli območje kroga, ki je pi * r * r, če je dan polmer, poiščite površino kvadrata, ki je stran * stran, če je navedena dolžina strani, površina trikotnika (osnova * višina) / 2 pod pogojem, da sta osnovna dolžina in višina podana ipd.

Koncept preobremenitve zahteva čarobne metode.

Magic Methods se začne z __ (dvojno podčrtavanje) in PHP ga samodejno pokliče. Tudi te so vedno definirane znotraj razreda in ne izven razreda. Različne magične metode so __get (), __set, __ construct (), __destruct (), __call (), __callStatic (), __isset (), __unset (),

Če se preobremenitev izvaja, dinamično ustvarja lastnosti in metode, ki jih skupaj imenujemo entitete.

Subjekti so imenovani tudi kot

  • lastnosti: člani podatkov
  • metode: podatkovne funkcije

Poglejmo, kako deluje magična metoda z uporabo metode __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);
?>

V zgornjem primeru smo razglasili razred z imenom Test, ki ima zasebno lastnost in metodo __call. Na metodo __call sta podana dva argumenta. Znotraj metode __call smo uporabili stavek print (), vrnili bomo argumente in vrnili vrednost x.

Nato se ustvari objekt razreda z imenom obj in z uporabo tega predmeta se imenuje nedefinirana metoda, ker ta metoda ne obstaja, namesto tega se imenuje __call ().

Vrste preobremenitve v PHP

Obstajata dve vrsti preobremenitve v PHP-ju in naj se podrobno naučimo vsako vrsto.

  • Preobremenitev lastnine
  • Metoda Preobremenitev

1) Preobremenitev lastnine

Preobremenitev lastnosti ustvari dinamične lastnosti, ko je predmet nastavljen. Ta lastnost je povezana z primerom razreda in če ta lastnost ni navedena v obsegu razreda, se šteje kot preobremenjena lastnost. Za to vam ni treba napisati dodatne kode. Naslednje čarobne metode nam povedo več o istem.

Spodaj so navedene operacije, ki se izvajajo s preobremenjenimi lastnostmi

Setter in Getter sta preobremenila lastnosti (z uporabo __set () in __get ())

Ocenjevanje nastavitve preobremenjenih lastnosti (z uporabo __isset ())

Razveljavi nastavitev lastnosti (z uporabo __unset ())

Razumejmo uporabo vsake od teh metod

__set () => se uporablja za inicializacijo preobremenjenih lastnosti.

__get () => se uporablja za pridobivanje že inicializiranih lastnosti

__isset () => se uporablja za preverjanje, ali je lastnost nastavljena ali ne

__unset () => se uporablja za razveljavitev lastnosti.

__call () => se uporablja za inicializacijo preobremenjenih metod

__callStatic () => se uporablja za inicializacijo statičnih metod

Vse zgornje metode so uporabljene v naslednjem primeru.

Koda:

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;

Koda:

Izhod

2) Metoda preobremenitev

Tako kot preobremenitev z lastnostmi, tudi preobremenitev metode ustvari dinamično metodo, ki je deklarirana zunaj obsega razreda. In to je mogoče z magičnimi metodami __call () in __callStatic (). Uporabljajo se na podlagi referenc na objektu oziroma statične reference.

__call () -> se uporablja za klic preobremenjenih metod v referenci predmeta

__callStatic () -> se uporablja za klicanje preobremenjenih metod v statični referenci

Naslednji primer vam bo pomagal izvedeti več.

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

Koda:

Izhod:

Pravila

1) Specifik javnega dostopa se uporablja za metode preobremenitve.

2) Uporablja se postopek preobremenitve, pri katerem je mogoče pri ustvarjanju predmeta razreda dostopati do lastnosti ali metod, ki niso opredeljene v obsegu razreda.

3) Magične metode se uporabljajo za preobremenitve lastnosti ali metod. Od dveh magičnih metod, ki se uporabljata za metode preobremenitve, je najbolj uporabljena metoda __call () v objektnem kontekstu, manj uporabljena pa je metoda __callStatic (), ki se uporablja v statičnem kontekstu.

Priporočeni članek

To je vodnik za preobremenitev v PHP. Tukaj s primeri obravnavamo vrste in koncept preobremenitve v PHP. Če želite izvedeti več, si oglejte tudi naslednji članek -

  1. Kaj je PHP?
  2. Kaj je PHP Array?
  3. Temeljna vprašanja o intervjuju za PHP
  4. Funkcije nizov PHP
  5. Preobremenitev v C # | Kako deluje?
  6. Uvod v preobremenitev v C ++
  7. Statična metoda v PHP
  8. Preobremenitev in preglasitev v C #
  9. Magična metoda Python | Metode, komponente (primeri)