Mikä on ylikuormitus PHP: ssä?

Meillä on erilaisia ​​käsityksiä oliokeskeisestä ohjelmoinnista, kuten luokka, objekti, kapselointi, polymorfismi jne. PHP: ssä. Ylikuormitus on myös tällainen käsitys OOP: ista PHP: ssä.

Funktion ylikuormitus tai menetelmän ylikuormitus on ominaisuus, jonka avulla voidaan luoda useita samannimisiä menetelmiä, jotka eroavat toisistaan ​​syöttöparametrien tyypin mukaan. Se määritellään yksinkertaisesti yhden toiminnon kyvyksi suorittaa erilaisia ​​tehtäviä.

Yhden kuormituksen määritelmä yhdellä rivillä: ”sama nimi, mutta erilaiset toteutukset”

Kuinka ylikuormitus toimii PHP: ssä?

Kuten tiedämme, menetelmien ylikuormitus suoritetaan toiminnoille. Siten toiminnot voidaan ylikuormittaa erilaisilla toteutuksilla kullekin toiminnolle annettujen argumenttien perusteella. Esimerkiksi löytääksesi ympyrän alueen, joka on pi * r * r edellyttäen, että säde annetaan, löytääksesi neliön pinnan, joka on puoli * puoli, jos sivun pituus annetaan, kolmion pinta-ala on (pohja * korkeus) / 2 edellyttäen, että pohjan pituus ja korkeus on annettu ja niin edelleen.

Ylikuormituskonsepti vaatii taikuusmenetelmiä.

Taikuusmenetelmät alkavat __ (kaksinkertainen alaviiva), ja PHP kutsuu ne automaattisesti. Myös nämä määritellään aina luokan sisällä eikä luokan ulkopuolella. Eri taikuusmenetelmiä ovat __get (), __set, __ rakentaa (), __ tuhoa (), __soitto (), __callStatic (), __isset (), __unset (),

Ylikuormitus suoritettaessa luo ominaisuuksia ja menetelmiä dynaamisesti, jota yhdessä kutsutaan kokonaisuuksiksi.

Kokonaisuuksia kutsutaan myös nimellä

  • ominaisuudet: datajäsenet
  • menetelmät: datafunktiot

Katsokaamme miten taikuusmenetelmä toimii __call () -menetelmää käyttämällä

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

Yllä olevassa esimerkissä olemme julistaneet luokan nimeltä Test, jolla on yksityinen omaisuus ja __call-menetelmä. Kaksi argumenttia välitetään __call-menetelmälle. __Call-menetelmän sisällä olemme käyttäneet lause print (), argumentit var_dump ja arvo x palautetaan.

Sitten luokan objekti nimellä obj luodaan ja tätä objektia käyttämällä kutsutaan määrittelemätöntä menetelmää, koska tätä menetelmää ei ole olemassa, __call () kutsutaan sen sijaan.

Ylikuormitustyypit PHP: ssä

PHP: ssä on kahta tyyppiä ylikuormitusta ja opitaan kumpikin tyyppi yksityiskohtaisesti.

  • Kiinteistön ylikuormitus
  • Menetelmä ylikuormitus

1) Kiinteistön ylikuormitus

Ominaisuuden ylikuormitus luo dynaamisia ominaisuuksia, kun objekti on asetettu. Tämä ominaisuus liittyy luokan ilmentymään, ja jos tätä ominaisuutta ei ole ilmoitettu luokan rajoissa, sitä pidetään ylikuormitettuna omaisuutena. Tätä varten sinun ei tarvitse kirjoittaa ylimääräistä koodia. Seuraavat taikuusmenetelmät kertovat meille lisää samasta.

Alla mainitaan ylikuormitetulla ominaisuudella suoritettavat toimenpiteet

Setterin ja Getterin ylikuormitetut ominaisuudet (käyttämällä __set () ja __get ())

Ylikuormitettujen ominaisuuksien asetuksen arviointi (käyttämällä __isset ())

Kumoa tällainen ominaisuusasetus (käyttämällä __unset ())

Ymmärtäkäämme näiden menetelmien käyttöä

__set () =>: ta käytetään ylikuormitettujen ominaisuuksien alustamiseen.

__get () =>: ta käytetään jo alustettujen ominaisuuksien hakemiseen

__isset () => -ominaisuutta käytetään tarkistamaan onko ominaisuus asetettu vai ei

__unset () =>: ta käytetään ominaisuuden purkamiseen.

__call () =>: ta käytetään ylikuormitettujen menetelmien alustamiseen

__callStatic () =>: ta käytetään staattisten menetelmien alustamiseen

Kaikkia yllä olevia menetelmiä käytetään yhdessä seuraavassa esimerkissä.

Koodi:

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;

Koodi:

ulostulo

2) Menetelmän ylikuormitus

Kuten kiinteistön ylikuormitus, menetelmän ylikuormitus luo dynaamisen menetelmän, joka julistetaan luokan laajuuden ulkopuolelle. Ja tämä on mahdollista __call () ja __callStatic () taikuusmenetelmillä. Niitä käytetään objektiviittauksen ja vastaavasti staattisen referenssin perusteella.

__call () -> käytetään ylikuormitettujen menetelmien kutsumiseen kohdeviitteessä

__callStatic () ->: ta käytetään ylikuormitettujen menetelmien kutsumiseen staattisessa referenssissä

Seuraava esimerkki auttaa sinua oppimaan lisää.

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

Koodi:

lähtö:

säännöt

1) Ylikuormitusmenetelmiin käytetään julkisen pääsyn määrittelyä.

2) Käytetään ylikuormitusprosessia, jossa ominaisuuksiin tai menetelmiin, joita ei ole määritelty luokan rajoissa, voidaan päästä luodessaan luokan objekti.

3) Maagisia menetelmiä käytetään ominaisuuksien tai menetelmien ylikuormitukseen. Kaikista taikuumenetelmistä, joita käytetään ylikuormitusmenetelmiin, eniten käytetty menetelmä on __call () -menetelmä objektiyhteydessä ja vähemmän käytetty on __callStatic () -menetelmä, jota käytetään staattisessa yhteydessä.

Suositeltava artikkeli

Tämä on opas ylikuormitukseen PHP: ssä. Tässä keskustellaan PHP: n ylikuormituksen tyypeistä ja käsitteestä esimerkkien avulla. Voit myös tarkastella seuraavaa artikkelia saadaksesi lisätietoja -

  1. Mikä on PHP?
  2. Mikä on PHP-taulukko?
  3. Keskeiset PHP-haastattelukysymykset
  4. PHP-merkkijonotoiminnot
  5. Ylikuormitus C # |: ssa Kuinka se toimii?
  6. Johdanto ylikuormitukseen C ++: ssa
  7. Staattinen menetelmä PHP: ssä
  8. Ylikuormitus ja ohittaminen C #: ssä
  9. Python-maaginen menetelmä | Menetelmät, komponentit (esimerkit)