Maison  >  Article  >  développement back-end  >  Comment reconnaître les méthodes magiques en php

Comment reconnaître les méthodes magiques en php

coldplay.xixi
coldplay.xixioriginal
2020-09-29 13:11:142091parcourir

En PHP, toutes les méthodes de classe commençant par "__", c'est-à-dire deux traits de soulignement, sont réservées comme méthodes magiques. Les méthodes magiques en PHP incluent "__construct()", "__destruct()" et "__call". ()", "__callStatic()" et ainsi de suite.

Comment reconnaître les méthodes magiques en php

Les méthodes magiques sont :

1 __get, __set

Ces deux méthodes sont. Conçue pour les propriétés qui ne sont pas déclarées dans les classes et leurs superclasses

__get( $property ) Cette méthode est déclenchée lorsqu'une propriété non définie est appelée, en passant le paramètre qui est la propriété à laquelle on accède Nom

__set( $property, $value ) Lors de l'attribution d'une valeur à une propriété non définie, cette méthode sera déclenchée. Les paramètres transmis sont le nom et la valeur de la propriété définie

Il n'y a pas de déclaration ici, y compris les attributs dont l'accès. le contrôle est protégé et privé (c'est-à-dire les attributs qui n'ont pas d'autorisation d'accès) lorsqu'il est appelé à l'aide d'objets.

2. __isset, __unset

__isset( $property ) Cette méthode est appelée lorsque la fonction isset() est appelée sur une propriété non définie

__unset( $property ) Ceci La méthode est appelée lorsque la fonction unset() est appelée sur une propriété non définie.

Identique à la méthode __get et à la méthode __set. La déclaration no inclut ici que lorsqu'elle est appelée avec un objet, le contrôle d'accès est protégé, privé. Attributs (c'est-à-dire les attributs qui n'ont pas l'autorisation d'accès)

3. __call

__call( $method, $arg_array ) Lors de l'appel d'une méthode non définie, cette méthode est appelée

Les méthodes non définies ici incluent les méthodes qui n'ont pas l'autorisation d'accéder ; si la méthode n'existe pas, accédez à la classe parent pour trouver la méthode. Si elle n'existe pas dans la classe parent, appelez la méthode __call(). de cette classe. S'il n'existe pas dans cette classe, Si la méthode __call() existe, accédez à la méthode __call() dans la classe parent

4.

Fonction __autoload, elle essaiera d'utiliser la fonction __autoload qui n'a pas encore été définie. Appelée automatiquement lorsque la classe. En appelant cette fonction, le moteur de script a une dernière chance de charger les classes requises avant que PHP échoue avec une erreur.

Si vous souhaitez définir une classe de chargement automatique globale, vous devez utiliser la méthode spl_autoload_register() pour enregistrer la classe de traitement dans la bibliothèque standard PHP :

Le code est le suivant :

<?php   
class Loader   
{   
static function autoload_class($class_name)   
{   
//寻找正确的$class_name类,并引入,没有则抛出异常   
}   
}   
/**
*   设置对象的自动载入
*   spl_autoload_register — Register given function as __autoload() implementation
*/   
spl_autoload_register(array(&#39;Loader&#39;, &#39;autoload_class&#39;));   
$a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类   
?>

Remarque : les exceptions levées dans la fonction __autoload ne peuvent pas être interceptées par le bloc d'instruction catch et provoquer des erreurs fatales, elles doivent donc être interceptées dans la fonction elle-même.

5. __construct, __destruct

__construct méthode constructeur, cette méthode est appelée lors de la création d'un objet. L'avantage d'utiliser cette méthode par rapport à PHP4 est que la méthode constructeur peut avoir un nom unique. . Quel que soit le nom de la classe dans laquelle elle se trouve. De cette façon, lorsque vous modifiez le nom de la classe, vous n'avez pas besoin de changer le nom du constructeur

__destruct de la méthode destructeur PHP. supprimer l'objet de la mémoire avant qu'il ne soit détruit. Avant de l'effacer), appelez cette méthode. Par défaut, PHP libère uniquement la mémoire occupée par les propriétés des objets et détruit les ressources liées aux objets. Le destructeur permet d'exécuter du code arbitraire pour effacer la mémoire après avoir utilisé un objet. Lorsque PHP décide que votre script n'est plus associé à l'objet, le destructeur sera appelé.

Dans l'espace de noms d'une fonction, cela se produira au retour de la fonction.

Pour les variables globales, cela se produit à la fin du script.

Si vous souhaitez détruire explicitement un objet, vous pouvez attribuer n'importe quelle autre valeur à la variable pointant vers l'objet. Attribuez généralement la variable à NULL ou appelez unset

6. >

L'affectation d'objet en PHP5 utilise l'affectation de référence. Si vous souhaitez copier un objet, vous devez utiliser la méthode clone. Lors de l'appel de cette méthode, l'objet appellera automatiquement la méthode magique __clone. des opérations d'initialisation doivent être effectuées, peuvent être implémentées dans la méthode __clone.

7. __toString

La méthode __toString est automatiquement appelée lors de la conversion d'un objet en chaîne, par exemple lors de l'utilisation d'echo pour imprimer l'objet.

Si la classe n'implémente pas cette méthode, l'objet ne peut pas être imprimé via echo, sinon il affichera : Catchable fatal error : L'objet de la classe test n'a pas pu être converti en chaîne dans

Ceci La méthode doit renvoyer une chaîne.

Avant PHP 5.2.0, la méthode __toString ne pouvait prendre effet que lorsqu'elle était utilisée conjointement avec echo() ou print(). Après PHP 5.2.0, il peut prendre effet dans n'importe quel environnement de chaîne (par exemple, via printf(), en utilisant le modificateur %s), mais ne peut pas être utilisé dans des environnements sans chaîne (comme en utilisant le modificateur %d). Depuis PHP 5.2.0, si un objet qui ne définit pas la méthode __toString est converti en chaîne, une erreur E_RECOVERABLE_ERROR sera signalée.

8. __sleep, __wakeup

__sleep est utilisé pendant la sérialisation

__wakeup est appelé pendant la désérialisation

serialize() est vérifié dans la classe Is. il y a une fonction avec le nom magique __sleep. Si tel est le cas, la fonction s'exécutera avant toute sérialisation. Il efface l'objet et doit renvoyer un tableau contenant les noms de toutes les variables de l'objet qui doivent être sérialisées.

Le but de l'utilisation de __sleep est de fermer toutes les connexions à la base de données que l'objet peut avoir, de soumettre des données en attente ou d'effectuer des tâches de nettoyage similaires. De plus, cette fonction est utile si vous disposez d’objets très volumineux qui n’ont pas besoin d’être stockés complètement.

À l'inverse, unserialize() vérifie l'existence d'une fonction portant le nom magique __wakeup. Cette fonction peut reconstruire toutes les ressources que l'objet peut avoir, s'il est présent.

Le but de l'utilisation de __wakeup est de rétablir toutes les connexions à la base de données qui pourraient avoir été perdues lors de la sérialisation et de gérer d'autres tâches de réinitialisation.

9. __set_state

Lorsque var_export() est appelé, cette méthode statique sera appelée (valable depuis PHP 5.1.0).

Le seul paramètre de cette méthode est un tableau, qui contient des propriétés de classe disposées au format array('property' => value, …).

10. __invoke

Lorsque vous essayez d'appeler un objet en appelant une fonction, la méthode __invoke sera automatiquement appelée.

PHP5.3.0 ou supérieur est valide

11. __callStatic

Cela fonctionne de la même manière que la méthode magique __call() consiste à gérer les appels de méthode statiques. 🎜>

Valable pour PHP 5.3.0 et supérieur

PHP a en effet renforcé la définition de la méthode __callStatic() elle doit être publique et doit être déclarée statique ; De même, la méthode magique __call() doit être définie comme publique, comme toutes les autres méthodes magiques

Pour plus d'apprentissage en programmation, veuillez faire attention à la colonne

formation php  !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn