Co jsou magické metody v PHP? a jak je implementovat?



Tento článek vám poskytne podrobné a komplexní znalosti různých magických metod v PHP s příklady.

v , speciální funkce lze definovat takovým způsobem, že je lze volat automaticky a nevyžaduje žádné volání funkce k provedení kódu uvnitř těchto funkcí. Tato funkce je k dispozici ve speciální metodě známé jako magické metody. V tomto článku budeme diskutovat o nejlepších Magic Methods v PHP.

Co jsou magické metody v PHP?

Metody, které začínají 2 podtržítky (__), se v PHP obecně nazývají Magické metody. Názvy těchto metod jsou omezeny na nějaký seznam PHP podporovaná klíčová slova, která jsou vyhrazena. Žádná funkce by tedy neměla být definována názvem magických metod PHP.





Magic-Methods-in-PHP

Obvykle by tyto funkce měly být definovány uživatelem a není třeba je výslovně volat.



Seznam magických metod v PHP

  • __postavit()
  • __zničit()
  • __call ($ zábava, $ arg)
  • __callStatic ($ zábava, $ arg)
  • __get (vlastnost $)
  • __set (vlastnost $, hodnota $)
  • __isset ($ obsah)
  • __unset ($ obsah)
  • __spát()
  • __vzbudit()
  • __toString ()
  • __invoke ()
  • __set_state ($ pole)
  • __clone ()
  • __debugInfo ()
  • __postavit(): Jedná se o metodu, která se volá automaticky po vytvoření objektu. Lze zde definovat libovolný počet argumentů, které budou předány při vytváření objektů.
ukázka třídy {funkce user_def () {echo 'uživatelsky definovaný konstruktor'} funkce __construct () {echo 'předdefinovaný konstruktor'}} $ obj = new sample ()?>

  • __zničit(): Destruktor je běžnou vlastností objektově orientovaného jazyka, který se spustí, jakmile na konkrétní objekt neexistují žádné další odkazy.
user_def () // zkontrolovat objekt je zničen nebo ne echo is_object ($ obj). ' '?>

  • __call ($ fun, $ arg): Tato metoda se volá, když se volá nedefinovaná nebo nepřístupná metoda. Což znamená, že se volá, když je na objekt vyvolána nedefinovaná nebo nepřístupná metoda.
run ('teacher') // Pokud je v objektu volána metoda, která neexistuje, bude automaticky volána metoda __call (). $ obj-> jíst ('ashok', 'oranžová') $ obj-> user_define ()?>



  • __callStatic ($ zábava, $ arg): Tato metoda se volá, když je nedefinovaná nebo nepřístupná metoda vyvolána statickým způsobem.
user_define ()?>

  • __get (vlastnost $): Tato metoda se používá k získání hodnot pro vlastnosti třídy vytvořené dynamicky přetíž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) // Vytvořte instanci objektu ve třídě Student a přiřaďte počáteční hodnoty k vlastnostem s konstruktorem. ozvěna 'Jméno :'. $ obj-> jméno. '' // Při přístupu k soukromé vlastnosti bude metoda __get () volána automaticky, takže můžeme získat hodnotu vlastnosti nepřímo. ozvěna 'reg :'. $ obj-> reg. '' // Metoda __get () se volá automaticky , a vrací různé hodnoty podle samotného objektu. ?>

  • __set (vlastnost $, hodnota $): Tato metoda se používá pro vkládání hodnot pro vlastnosti třídy vytvořené dynamicky přetíž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 name is '. $ this-> name.', My registration number is '. $ this-> reg}} $ obj = new Student (' Ashok ', 40) // Všimněte si, že počáteční hodnota bude změněna kódem níže. $ obj-> name = 'Sushma' // Vlastnost 'name' bude úspěšně přiřazena. Pokud neexistuje žádná metoda __set (), program vyvolá výjimku. $ obj-> age = 16 // Vlastnost 'reg' bude úspěšně přiřazena. $ obj-> reg = 160 // 160 je neplatná hodnota, takže ji nelze přiřadit. $ obj-> fun ()?>

  • __isset ($ obsah); Tato metoda bude volána při volání isset () nebo empty () pro nedefinovaného nebo nepřístupného člena. Vyvolává se automaticky při kontrole, zda je nastavena požadovaná přetížená vlastnost, či nikoli, pomocí funkce PHP isset ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} veřejná funkce __isset ($ content) {echo 'Vlastnost {$ content} je soukromá , metoda __isset () je volána automaticky. 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // Původně přiřazeno. echo isset ($ obj-> gender), '' echo isset ($ obj-> name), '' echo isset ($ obj-> reg), ''?>

  • __unset ($ obsah): Tato metoda bude volána při volání reset () pro nedefinovaného nebo nepřístupného člena.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __unset ($ content) {echo 'Volá se automaticky, když použijeme metodu unset () mimo třídu. 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // Původně přiřazeno. unset ($ obj-> gender) unset ($ obj-> name) unset ($ obj-> reg)?>

  • __spát(): Tato metoda je volána jako první při provádění serialize (). Vrátí pole vlastností objektu při čištění objektů třídy PHP před serializací.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __sleep () {echo 'Je volána, když je metoda serialize () volána mimo třídu. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Musí vrátit hodnotu, jejíž prvky jsou názvy vrácených vlastností. }} $ obj = new Student ('Ashok') // Původně přiřazeno. echo serializovat ($ obj) echo ''?>

  • __vzbudit(): Tato metoda se volá při provádění deserializace (). Zvrátilo by to práci na obnovení vlastností a prostředků objektů při vyvolání deserializace ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __sleep () {echo 'Je volána, když je metoda serialize () volána mimo třídu. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Musí vrátit hodnotu, jejíž prvky jsou názvy vrácených vlastností. } public function __wakeup () {echo 'Je volána, když je metoda unserialize () volána mimo třídu. '$ this-> name = 2 $ this-> gender =' Male '}} $ obj = new Student (' Ashok ') // Původně přiřazeno. var_dump (serialize ($ obj)) var_dump (unserialize (serialize ($ obj)))?>

implementovat min haldy v Javě
  • __toString (): Tato metoda bude volána při použití metody echo k přímému tisku objektu. Očekává se, že při použití instancí třídy s tiskovými příkazy PHP vrátí hodnotu řetězce.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} veřejná funkce __toString () {return 'go go go'}} $ obj = new Student ('Ashok') // Původně přiřazeno. echo $ obj?>

  • __invoke (): Tato metoda je definována ve třídě, která bude volána při pokusu o volání objektu způsobem volání funkce.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} veřejná funkce __invoke () {echo 'Toto je objekt'}} $ obj = new Student ('Ashok') // Původně přiřazeno . $ obj ()?>

  • __set_state ($ pole): Tato metoda se volá při volání var_export (). Jedná se o statickou metodu vyvolanou při exportu pole vlastností objektů a očekává takovou proměnnou pole jako jeho argument.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender}} $ obj = new Student ('Ashok') // Původně přiděleno. var_export ($ obj)?>

  • __clone (): Tato metoda se volá při kopírování objektu.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} public function __clone () {echo __METHOD __. 'klonujete objekt. '}} $ obj = new Student (' Ashok ') // Původně přiřazeno. $ obj2 = klon $ obj var_dump ('object1:') var_dump ($ obj) echo '' var_dump ('object2:') var_dump ($ obj2)?>

  • __debugInfo (): Tuto metodu volá var_dump () při vypouštění objektu, aby získal vlastnosti, které by se měly zobrazit. Pokud metoda není na objektu definována, zobrazí se všechny veřejné, chráněné a soukromé vlastnosti.
prop = $ val} veřejná funkce __debugInfo () {return ['propSquared' => $ this-> prop ** 2,]}} var_dump (nový vzorek (22))?>

Tímto jsme v článku PHP ukončili tuto magickou metodu. Doufám, že jste získali představu o různých magických metodách v PHP.

Podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů na stránce ” Magické metody v PHP „A ozvu se vám.