Wat zijn magische methoden in PHP? en hoe ze te implementeren?



Dit artikel geeft je een gedetailleerde en uitgebreide kennis van de verschillende magische methoden in PHP met voorbeelden.

In kunnen speciale functies zo worden gedefinieerd dat ze automatisch kunnen worden aangeroepen en dat er geen functieaanroep nodig is om de code binnen deze functies uit te voeren. Deze functie is beschikbaar in een speciale methode die bekend staat als magische methoden. In dit artikel bespreken we de beste magische methoden in PHP.

Wat zijn magische methoden in PHP?

Methoden die beginnen met 2 onderstrepingstekens (__) worden in PHP over het algemeen Magic-methoden genoemd. De namen van deze methoden zijn beperkt tot een lijst met Php ondersteunde trefwoorden die zijn gereserveerd. Elke functie mag dus niet worden gedefinieerd met de naam van PHP-magische methoden.





Magic-Methods-in-PHP

Meestal moeten deze functies door de gebruiker worden gedefinieerd en is het niet nodig om ze expliciet aan te roepen.



Lijst met magische methoden in PHP

  • __construct ()
  • __vernietigen()
  • __call ($ fun, $ arg)
  • __callStatic ($ fun, $ arg)
  • __get ($ eigenschap)
  • __set ($ eigenschap, $ waarde)
  • __isset ($ content)
  • __unset ($ content)
  • __slaap()
  • __wakker worden()
  • __toString ()
  • __beroep doen op()
  • __set_state ($ array)
  • __clone ()
  • __debugInfo ()
  • __construct (): Het is een methode die automatisch wordt aangeroepen na het maken van een object. Hier kan een willekeurig aantal argumenten worden gedefinieerd die worden doorgegeven wanneer objecten worden gemaakt.
class sample {functie user_def () {echo 'gebruiker gedefinieerde constructor'} functie __construct () {echo 'voorgedefinieerde constructor'}} $ obj = nieuw sample ()?>

pl sql tutorial voor beginners
  • __vernietigen(): Destructor is een veelvoorkomend kenmerk van de objectgeoriënteerde taal die wordt geactiveerd zodra er geen andere verwijzingen naar een bepaald object zijn.
user_def () // controleer of het object is vernietigd of niet echo is_object ($ obj). ' '?>

  • __call ($ fun, $ arg): Deze methode wordt aangeroepen wanneer een ongedefinieerde of ontoegankelijke methode wordt aangeroepen. Wat betekent dat het wordt aangeroepen wanneer een ongedefinieerde of ontoegankelijke methode wordt aangeroepen op een object.
run ('teacher') // Als de methode die niet bestaat wordt aangeroepen binnen het object, dan zal de __call () methode automatisch worden aangeroepen. $ obj-> eten ('ashok', 'oranje') $ obj-> user_define ()?>



  • __callStatic ($ fun, $ arg): Deze methode wordt aangeroepen wanneer een ongedefinieerde of ontoegankelijke methode op een statische manier wordt aangeroepen.
user_define ()?>

  • __get ($ eigenschap): Deze methode wordt gebruikt om waarden op te halen voor klasse-eigenschappen die dynamisch zijn gemaakt door overbelasting van PHP-eigenschappen.
name = $ name $ this-> reg = $ reg} publieke functie __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) // Instantieer het object met de klasse Student en wijs beginwaarden toe naar de eigenschappen met de constructor. echo 'Naam :'. $ obj-> naam. '' // Wanneer de privé-eigenschap wordt geopend, wordt de methode __get () automatisch aangeroepen, zodat we de waarde van de eigenschap indirect kunnen krijgen. echo 'reg:'. $ obj-> reg. '' // De __get () methode wordt automatisch aangeroepen, en het retourneert verschillende waarden op basis van het object zelf. ?>

  • __set ($ eigenschap, $ waarde): Deze methode wordt gebruikt voor het plaatsen van waarden voor klasse-eigenschappen die dynamisch zijn gemaakt door overbelasting van PHP-eigenschappen.
name = $ name $ this-> reg = $ reg} publieke functie __set ($ property, $ value) {if ($ property == 'reg') $ value $ property = $ value publieke functie fun () {echo 'Mijn naam is '. $ this-> name.', Mijn registratienummer is '. $ this-> reg}} $ obj = new Student (' Ashok ', 40) // Merk op dat de oorspronkelijke waarde zal worden gewijzigd door de code hieronder. $ obj-> name = 'Sushma' // De eigenschap 'name' zal succesvol worden toegewezen. Als er geen __set () - methode is, zal het programma een uitzondering genereren. $ obj-> age = 16 // De eigenschap 'reg' wordt succesvol toegewezen. $ obj-> reg = 160 // 160 is een ongeldige waarde, dus deze kan niet worden toegewezen. $ obj-> fun ()?>

  • __isset ($ content); Deze methode wordt aangeroepen bij het aanroepen van isset () of empty () voor een ongedefinieerd of ontoegankelijk lid. Het wordt automatisch aangeroepen tijdens het controleren of een vereiste overbelaste eigenschap is ingesteld of niet, met behulp van de PHP-functie isset ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} publieke functie __isset ($ content) {echo 'De eigenschap {$ content} is privé, de __isset () methode wordt automatisch aangeroepen. 'echo isset ($ this -> $ content)}} $ obj = nieuwe student (' Ashok ', 30) // Initieel toegewezen. echo isset ($ obj-> geslacht), '' echo isset ($ obj-> name), '' echo isset ($ obj-> reg), '?>

  • __unset ($ content): Deze methode wordt aangeroepen bij het aanroepen van reset () voor een ongedefinieerd of ontoegankelijk lid.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} publieke functie __unset ($ content) {echo 'Het wordt automatisch aangeroepen wanneer we de methode unset () buiten de klas gebruiken. 'echo isset ($ this -> $ content)}} $ obj = nieuwe student (' Ashok ', 30) // Initieel toegewezen. unset ($ obj-> geslacht) unset ($ obj-> name) unset ($ obj-> reg)?>

  • __slaap(): Deze methode wordt als eerste aangeroepen tijdens het uitvoeren van serialize (). Het retourneert de eigenschappenarray van het object bij het opschonen van PHP-klasseobjecten vóór serialisering.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} publieke functie __sleep () {echo 'Het wordt aangeroepen wanneer de methode serialize () buiten de klas wordt aangeroepen. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Het moet een waarde retourneren waarvan de elementen de naam zijn van de geretourneerde eigenschappen. }} $ obj = nieuwe student ('Ashok') // Aanvankelijk toegewezen. echo serialize ($ obj) echo ''?>

het ontleden van xml-bestanden in java
  • __wakker worden(): Deze methode wordt aangeroepen terwijl deserialization () wordt uitgevoerd. Het zou het werk om de eigenschappen van objecten en bronnen te herstellen omkeren bij het aanroepen van deserialization ().
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} publieke functie __sleep () {echo 'Het wordt aangeroepen wanneer de methode serialize () buiten de klas wordt aangeroepen. '$ this-> name = base64_encode ($ this-> name) return array (' name ',' reg ') // Het moet een waarde retourneren waarvan de elementen de naam zijn van de geretourneerde eigenschappen. } public function __wakeup () {echo 'Het wordt aangeroepen wanneer de methode unserialize () buiten de klasse wordt aangeroepen. '$ this-> name = 2 $ this-> gender =' Male '}} $ obj = nieuwe student (' Ashok ') // Oorspronkelijk toegewezen. var_dump (serialize ($ obj)) var_dump (unserialize (serialize ($ obj)))?>

  • __toString (): Deze methode wordt aangeroepen tijdens het gebruik van de echo-methode om een ​​object rechtstreeks af te drukken. Er wordt verwacht dat het een tekenreekswaarde retourneert tijdens het gebruik van klasse-instanties met PHP-afdrukinstructies.
name = $ name $ this-> reg = $ reg $ this-> gender = $ gender} publieke functie __toString () {return 'go go go'}} $ obj = nieuwe student ('Ashok') // Aanvankelijk toegewezen. echo $ obj?>

  • __beroep doen op(): Deze methode is gedefinieerd in een klasse die wordt aangeroepen terwijl wordt geprobeerd een object aan te roepen als functie.
name = $ naam $ this-> reg = $ reg $ this-> gender = $ gender} publieke functie __invoke () {echo 'Dit is een object'}} $ obj = nieuwe student ('Ashok') // Aanvankelijk toegewezen . $ obj ()?>

  • __set_state ($ array): Deze methode wordt aangeroepen tijdens het aanroepen van var_export (). Het is een statische methode die wordt aangeroepen tijdens het exporteren van de eigenschappenarray van objecten en verwacht een dergelijke arrayvariabele als zijn argument.
name = $ naam $ this-> reg = $ reg $ this-> gender = $ gender}} $ obj = nieuwe student ('Ashok') // Aanvankelijk toegewezen. var_export ($ obj)?>

  • __clone (): Deze methode wordt aangeroepen wanneer het object wordt gekopieerd.
name = $ naam $ this-> reg = $ reg $ this-> gender = $ geslacht} publieke functie __clone () {echo __METHOD __. 'je bent het object aan het klonen. '}} $ obj = nieuwe student (' Ashok ') // Oorspronkelijk toegewezen. $ obj2 = kloon $ obj var_dump ('object1:') var_dump ($ obj) echo '' var_dump ('object2:') var_dump ($ obj2)?>

  • __debugInfo (): Deze methode wordt aangeroepen door var_dump () terwijl een object wordt gedumpt om de eigenschappen te krijgen die getoond zouden moeten worden. Als de methode niet voor een object is gedefinieerd, worden alle openbare, beschermde en privé-eigenschappen weergegeven.
prop = $ val} publieke functie __debugInfo () {return ['propSquared' => $ this-> prop ** 2,]}} var_dump (nieuwe Sample (22))?>

Hiermee komen we aan het einde van deze magische methode in het PHP-artikel. Ik hoop dat je een idee hebt gekregen van de verschillende magische methoden in PHP.

c ++ sorteer een array

Bekijk de door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van ' Magische methoden in Php ”En ik neem contact met je op.