Čo sú to magické metódy v PHP? a ako ich implementovať?



Tento článok vám poskytne podrobné a komplexné znalosti rôznych magických metód v PHP s príkladmi.

V , špeciálne funkcie môžu byť definované tak, že ich možno vyvolávať automaticky a na vykonanie kódu vo vnútri týchto funkcií nevyžaduje žiadne volanie funkcií. Táto funkcia je k dispozícii špeciálnou metódou známou ako magické metódy. V tomto článku si rozoberieme najdôležitejšie Magic Methods v PHP.

Čo sú to Magic Methods v PHP?

Metódy, ktoré začínajú dvoma podčiarknutiami (__), sa v PHP všeobecne nazývajú Magické metódy. Názvy týchto metód sú obmedzené na určitý zoznam PHP podporované kľúčové slová, ktoré sú vyhradené. Žiadna funkcia by teda nemala byť definovaná pomocou názvu magických metód PHP.





Magic-Methods-in-PHP

Zvyčajne by tieto funkcie mali byť definované používateľom a nie je potrebné ich výslovne nazývať.



Zoznam magických metód v PHP

  • __construct ()
  • __destruct ()
  • __call ($ zábava, $ arg)
  • __callStatic ($ zábava, $ arg)
  • __get ($ property)
  • __set ($ property, $ value)
  • __isset ($ obsah)
  • __unset ($ obsah)
  • __sleep ()
  • __zobudiť sa()
  • __natiahnuť()
  • __vzývať()
  • __set_state ($ pole)
  • __clone ()
  • __debugInfo ()
  • __construct (): Je to metóda, ktorá sa volá automaticky po vytvorení objektu. Tu je možné definovať ľubovoľný počet argumentov, ktoré sa odovzdajú pri vytváraní objektov.
ukážka triedy {funkcia user_def () {echo 'používateľom definovaný konštruktor'} funkcia __construct () {echo 'preddefinovaný konštruktor'}} $ obj = new sample ()?>

  • __destruct (): Destruktor je spoločná vlastnosť objektovo orientovaného jazyka, ktorá sa spustí, akonáhle nebudú k dispozícii ďalšie odkazy na konkrétny objekt.
user_def () // skontrolovať, či je objekt zničený alebo či nie je echo is_object ($ obj). ' '?>

  • __call ($ fun, $ arg): Táto metóda sa volá, keď sa volá nedefinovaná alebo neprístupná metóda. Čo znamená, že sa volá, keď sa na objekt vyvolá nedefinovaná alebo neprístupná metóda.
run ('teacher') // Ak sa v objekte volá metóda, ktorá neexistuje, potom sa automaticky zavolá metóda __call (). $ obj-> jesť ('ashok', 'oranžová') $ obj-> user_define ()?>



  • __callStatic ($ zábava, $ arg): Táto metóda sa volá, keď je nedefinovaná alebo neprístupná metóda vyvolaná statickým spôsobom.
user_define ()?>

  • __get ($ property): Táto metóda sa používa na získanie hodnôt pre vlastnosti triedy vytvorené dynamicky preťažením vlastnosti PHP.
name = $ name $ this-> reg = $ reg} public function __get ($ propertyName) {if ($ propertyName == 'reg') {if ($ this-> reg> 30) {return $ this-> reg - 10} else {return $ this -> $ propertyName}} else {return $ this -> $ propertyName}}} $ obj = new Student ('Ashok', 60) // Vytvorte inštanciu objektu v triede Student a priraďte počiatočné hodnoty k vlastnostiam s konštruktorom. ozvena „Meno :“. $ obj-> meno. '' // Pri prístupe k súkromnému vlastníctvu sa automaticky zavolá metóda __get (), aby sme hodnotu vlastnosti mohli získať nepriamo. echo 'reg :'. $ obj-> reg. '' // Metóda __get () sa volá automaticky , a vracia rôzne hodnoty podľa samotného objektu. ?>

  • __set ($ property, $ value): Táto metóda sa používa na uvádzanie hodnôt pre vlastnosti triedy vytvorené dynamicky preťažením vlastnosti PHP.
name = $ name $ this-> reg = $ reg} public function __set ($ property, $ value) {if ($ property == 'reg') $ value $ property = $ value public function fun () {echo 'My meno je '. $ this-> meno.', moje registračné číslo je '. $ this-> reg}} $ obj = new Student (' Ashok ', 40) // Všimnite si, že počiatočná hodnota bude zmenená kódom nižšie. $ obj-> name = 'Sushma' // Vlastnosť 'name' bude úspešne priradená. Ak neexistuje metóda __set (), program vyvolá výnimku. $ obj-> age = 16 // Vlastnosť „reg“ bude úspešne priradená. $ obj-> reg = 160 // 160 je neplatná hodnota, takže sa nedá priradiť. $ obj-> fun ()?>

  • __isset ($ obsah); Táto metóda sa bude volať pri volaní isset () alebo empty () pre nedefinovaného alebo neprístupného člena. Vyvoláva sa automaticky pri kontrole, či je alebo nie je nastavená požadovaná preťažená vlastnosť, pomocou funkcie PHP isset ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} verejná funkcia __isset ($ content) {echo 'Vlastnosť {$ content} je súkromná , metóda __isset () sa volá automaticky. 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // Pôvodne pridelené. echo isset ($ obj-> gender), '' echo isset ($ obj-> name), '' echo isset ($ obj-> reg), ''?>

  • __unset ($ obsah): Táto metóda sa bude volať počas volania funkcie reset () pre nedefinovaného alebo neprístupného člena.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} verejná funkcia __unset ($ content) {echo 'Volá sa automaticky, keď použijeme metódu unset () mimo triedy. 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // Pôvodne pridelené. unset ($ obj-> gender) unset ($ obj-> name) unset ($ obj-> reg)?>

  • __sleep (): Táto metóda sa volá prvá pri vykonávaní serialize (). Vráti pole vlastností objektu pri čistení objektov triedy PHP pred serializáciou.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} verejná funkcia __sleep () {echo 'Zavolá sa, keď sa volá metóda serialize () mimo triedy. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Musí vrátiť hodnotu, ktorej prvky sú názvom vrátených vlastností. }} $ obj = new Student ('Ashok') // Pôvodne pridelené. echo serializovať ($ obj) echo ''?>

  • __zobudiť sa(): Táto metóda sa volá počas vykonávania deserializácie (). Zvrátilo by to prácu na obnove vlastností a prostriedkov objektov pri vyvolaní deserializácie ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} verejná funkcia __sleep () {echo 'Zavolá sa, keď sa volá metóda serialize () mimo triedy. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Musí vrátiť hodnotu, ktorej prvky sú názvom vrátených vlastností. } public function __wakeup () {echo 'Zavolá sa, keď sa metóda unserialize () volá mimo triedy. '$ this-> name = 2 $ this-> gender =' Male '}} $ obj = new Student (' Ashok ') // Pôvodne pridelené. var_dump (serialize ($ obj)) var_dump (unserialize (serialize ($ obj)))?>

trieda skenera v príklade Java
  • __natiahnuť(): Táto metóda sa bude volať pri použití metódy echo na priamu tlač objektu. Očakáva sa, že vráti hodnotu reťazca pri použití inštancií triedy s príkazmi na tlač PHP.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} verejná funkcia __toString () {return 'go go go'}} $ obj = new Student ('Ashok') // Pôvodne pridelené. echo $ obj?>

  • __vzývať(): Táto metóda je definovaná v triede, ktorá sa bude volať pri pokuse o volanie objektu spôsobom volania funkcie.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} verejná funkcia __invoke () {echo 'Toto je objekt'}} $ obj = new Student ('Ashok') // Pôvodne pridelené . $ obj ()?>

  • __set_state ($ pole): Táto metóda sa volá pri volaní var_export (). Je to statická metóda vyvolaná pri exportovaní poľa vlastností objektov a očakáva takúto premennú poľa ako jej argument.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender}} $ obj = new Student ('Ashok') // Pôvodne pridelené. var_export ($ obj)?>

  • __clone (): Táto metóda sa volá pri kopírovaní objektu.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __clone () {echo __METHOD __. 'klonujete objekt. '}} $ obj = new Student (' Ashok ') // Pôvodne pridelené. $ obj2 = klon $ obj var_dump ('object1:') var_dump ($ obj) echo '' var_dump ('object2:') var_dump ($ obj2)?>

  • __debugInfo (): Túto metódu volá var_dump () pri vyprázdňovaní objektu, aby získal vlastnosti, ktoré by sa mali zobraziť. Ak metóda nie je na objekte definovaná, zobrazia sa všetky verejné, chránené a súkromné ​​vlastnosti.
prop = $ val} verejná funkcia __debugInfo () {return ['propSquared' => $ this-> prop ** 2,]}} var_dump (nový Sample (22))?>

S týmto prichádzame k ukončeniu tejto magickej metódy v článku PHP. Dúfam, že ste získali predstavu o rôznych magických metódach v PHP.

Pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete.

Máte na nás otázku? Uveďte to v sekcii komentárov stránky ” Magické metódy v PHP “A ozvem sa ti.