Què són els mètodes màgics a PHP? i Com implementar-los?

Aquest article us proporcionarà un coneixement detallat i exhaustiu dels diversos mètodes màgics en PHP amb exemples.

En , les funcions especials es poden definir de manera que es puguin cridar automàticament i no requereixi cap trucada de funció per executar el codi dins d'aquestes funcions. Aquesta característica està disponible en un mètode especial conegut com a mètodes màgics. En aquest article, parlarem dels mètodes màgics més importants de PHP.



Què són els mètodes màgics en PHP?

Els mètodes que comencen amb 2 subratllats (__) generalment s’anomenen mètodes Magic en PHP. Aquests noms de mètodes es limiten a una llista de PHP paraules clau compatibles que estan reservades. Per tant, qualsevol funció no s’ha de definir amb el nom de mètodes màgics PHP.



Magic-Methods-in-PHP

Normalment, aquestes funcions haurien de ser definides per l’usuari i no cal trucar-les explícitament.



Llista de mètodes màgics en PHP

  • __construct ()
  • __destruct ()
  • __call ($ fun, $ arg)
  • __callStatic ($ fun, $ arg)
  • __get ($ property)
  • __set ($ propietat, $ valor)
  • __isset ($ content)
  • __unset ($ content)
  • __sleep ()
  • __Desperta()
  • __toString ()
  • __invocar()
  • __set_state ($ array)
  • __clone ()
  • __debugInfo ()
  • __construct (): És un mètode que es crida automàticament després de la creació d'un objecte. Aquí es pot definir qualsevol nombre d’arguments que es passaran quan es creen objectes.
class sample {function user_def () {echo 'constructor definit per l'usuari'} function __construct () {echo 'constructor predefinit'}} $ obj = new sample ()?>

  • __destruct (): El destructor és una característica comuna del llenguatge orientat a objectes que es desencadena tan aviat com no hi ha altres referències a un objecte concret.
user_def () // comprova que l'objecte està destruït o no es fa eco is_object ($ obj). ' '?>

  • __call ($ fun, $ arg): Aquest mètode es diu quan es diu un mètode no definit o inaccessible. El que significa que es crida quan s'invoca un mètode indefinit o inaccessible a un objecte.
run ('professor') // Si el mètode que no existeix es crida dins de l'objecte, el mètode __call () es cridarà automàticament. $ obj-> eat ('ashok', 'orange') $ obj-> user_define ()?>



  • __callStatic ($ fun, $ arg): Aquest mètode s’anomena quan s’invoca un mètode no definit o inaccessible de manera estàtica.
user_define ()?>

com comparar dues cadenes
  • __get ($ property): Aquest mètode s'utilitza per obtenir valors per a les propietats de classe creades dinàmicament per la sobrecàrrega de propietats PHP.
name = $ name $ this-> reg = $ reg} funció pública __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) // Instantiar l'objecte amb la classe Student i assignar valors inicials a les propietats amb el constructor. ressò 'Nom :'. $ obj-> nom. '' // Quan s'accedeix a la propietat privada, es cridarà automàticament al mètode __get (), de manera que podem obtenir el valor de la propietat de forma indirecta. ressò 'reg :'. $ obj-> reg. '' // El mètode __get () s'anomena automàticament , i retorna diferents valors segons el propi objecte. ?>

  • __set ($ propietat, $ valor): Aquest mètode s'utilitza per posar valors per a les propietats de classe creades dinàmicament per la sobrecàrrega de propietats PHP.
name = $ name $ this-> reg = $ reg} funció pública __set ($ property, $ value) {if ($ property == 'reg') $ value $ property = $ value public function fun () {echo 'My nom és '. $ this-> name.', el meu número de registre és '. $ this-> reg}} $ obj = new Student (' Ashok ', 40) // Tingueu en compte que el valor inicial es canviarà mitjançant el codi baix. $ obj-> name = 'Sushma' // La propietat 'name' s'assignarà correctament. Si no hi ha cap mètode __set (), el programa generarà una excepció. $ obj-> age = 16 // La propietat 'reg' s'assignarà correctament. $ obj-> reg = 160 // 160 és un valor no vàlid, de manera que no es pot assignar. $ obj-> fun ()?>

  • __isset ($ content); Aquest mètode es cridarà mentre es crida isset () o empty () per a un membre no definit o inaccessible. S'invoca automàticament mentre es comprova si s'estableix o no una propietat sobrecarregada necessària mitjançant la funció PHP isset ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __isset ($ content) {echo 'La propietat {$ content} és privada , el mètode __isset () es diu automàticament. 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // Assignat inicialment. echo isset ($ obj-> gender), '' echo isset ($ obj-> name), '' echo isset ($ obj-> reg), ''?>

  • __unset ($ content): Aquest mètode es cridarà mentre es crida reset () per a un membre no definit o inaccessible.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __unset ($ content) {echo 'Es diu automàticament quan fem servir el mètode unset () fora de la classe. 'echo isset ($ this -> $ content)}} $ obj = new Student (' Ashok ', 30) // Assignat inicialment. unset ($ obj-> gender) unset ($ obj-> name) unset ($ obj-> reg)?>

  • __sleep (): Aquest mètode s’anomena primer mentre s’executa serialize (). Retorna la matriu de propietats de l'objecte en netejar objectes de la classe PHP abans de la serialització.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __sleep () {echo 'Es diu quan el mètode serialize () es diu fora de la classe. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Ha de retornar un valor del qual els elements són el nom de les propietats retornades. }} $ obj = new Student ('Ashok') // Assignat inicialment. echo serialize ($ obj) echo ''?>

  • __Desperta(): Aquest mètode s’anomena mentre s’executa la deserialització (). Invertiria el treball per restaurar propietats i recursos dels objectes en invocar la deserialització ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __sleep () {echo 'Es diu quan el mètode serialize () es diu fora de la classe. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Ha de retornar un valor del qual els elements són el nom de les propietats retornades. } funció pública __wakeup () {echo 'Es diu quan el mètode unserialize () es diu fora de la classe. '$ this-> name = 2 $ this-> gender =' Home '}} $ obj = new Student (' Ashok ') // Assignat inicialment. var_dump (serialize ($ obj)) var_dump (unserialize (serialize ($ obj)))?>

  • __toString (): Aquest mètode es cridarà mentre s'utilitza el mètode echo per imprimir directament un objecte. S'espera que retorni un valor de cadena mentre s'utilitzen instàncies de classe amb sentències d'impressió PHP.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __toString () {return 'go go go'}} $ obj = new Student ('Ashok') // Assignat inicialment. echo $ obj?>

  • __invocar(): Aquest mètode es defineix en una classe que es cridarà mentre intenteu trucar a un objecte amb una forma de trucar a la funció.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __invoke () {echo 'This is a object'}} $ obj = new Student ('Ashok') // Assignat inicialment . $ obj ()?>

  • __set_state ($ array): Aquest mètode es diu mentre es crida a var_export (). És un mètode estàtic que s’invoca mentre s’exporta una matriu de propietats d’objectes i s’espera tal variable d’array com a argument.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender}} $ obj = new Student ('Ashok') // Assignat inicialment. var_export ($ obj)?>

  • __clone (): Aquest mètode s’anomena quan es copia l’objecte.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} funció pública __clone () {echo __METHOD __. 'Esteu clonant l'objecte. '}} $ obj = new Student (' Ashok ') // Assignat inicialment. $ obj2 = clona $ obj var_dump ('object1:') var_dump ($ obj) echo '' var_dump ('object2:') var_dump ($ obj2)?>

  • __debugInfo (): Aquest mètode s’anomena var_dump () mentre es descarrega un objecte per obtenir les propietats que s’han de mostrar. Si el mètode no està definit en un objecte, es mostraran totes les propietats públiques, protegides i privades.
prop = $ val} funció pública __debugInfo () {return ['propSquared' => $ this-> prop ** 2,]}} var_dump (nova mostra (22))?>

Amb això, arribem al final d’aquest mètode màgic a l’article PHP. Espero que tingueu una idea dels diversos mètodes màgics en PHP.

com escriure el mètode de publicació en Java

Consulteu el per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món.

Tens alguna pregunta? Esmenteu-lo a la secció de comentaris de ' Mètodes màgics a PHP ”I em posaré en contacte amb vosaltres.