[classes et objets php] méthodes magiques

不言
Libérer: 2023-03-23 20:54:01
original
1642 Les gens l'ont consulté

Le contenu partagé avec vous dans cet article concerne les méthodes magiques [classes et objets php] Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer

Méthodes magiques (Méthodes magiques)

__construct()__destruct()__callStatic()__set()__isset()__unset()__wakeup()__invoke()__clone() __debugInfo()
Copier après la connexion

__sleep() et __wakeup()

public array __sleep ( void )void __wakeup ( void )
Copier après la connexion

__sleep() est utilisé pour soumettre des données non validées ou des opérations de nettoyage similaires. Par exemple, il existe des objets très volumineux, mais il n’est pas nécessaire de les enregistrer tous.

__wakeup() est utilisé pour les opérations de désérialisation. Par exemple, rétablissez la connexion à la base de données ou effectuez d'autres opérations d'initialisation.

serialize() vérifiera s'il existe une méthode magique __sleep() dans la classe. Si elle est présente, cette méthode sera appelée en premier, puis l'opération de sérialisation sera effectuée. Cette fonction peut être utilisée pour nettoyer un objet et renvoyer un tableau contenant les noms de toutes les variables de l'objet qui doivent être sérialisées. Si la méthode ne renvoie rien, NULL est sérialisé et une erreur de niveau E_NOTICE est générée.

unserialize() vérifie s'il existe une méthode __wakeup(). Si elle existe, la méthode __wakeup sera appelée en premier pour préparer à l'avance les ressources nécessaires à l'objet.


Explication des concepts ci-dessus

Serialize peut convertir des variables, y compris des objets, en données d'octets continus. Vous pouvez enregistrer les variables sérialisées dans un fichier ou les transmettre sur le réseau. désérialisez-le aux données d'origine.Pour une classe que vous définissez avant de désérialiser l'objet de la classe, PHP peut stocker avec succès les propriétés et les méthodes de son objet. Parfois, vous aurez peut-être besoin de désérialiser un objet avant de le désérialiser immédiatement après la sérialisation. Pour cela, PHP recherchera automatiquement les méthodes __sleep et __wakeup.

Lorsqu'un objet est sérialisé, PHP appellera la méthode __sleep (si elle existe). Après avoir désérialisé un objet, PHP appelle la méthode __wakeup. Aucune des deux méthodes n'accepte de paramètres. La méthode __sleep doit renvoyer un tableau contenant les propriétés qui doivent être sérialisées. PHP ignore les valeurs des autres propriétés. S'il n'y a pas de méthode_ _sleep, PHP enregistrera tous les attributs. Avant l'exécution du programme, la fonction serialize() vérifiera d'abord s'il existe une méthode magique __sleep Si elle existe, la méthode __sleep() sera d'abord appelée puis exécutée. Cette fonction peut être utilisée pour nettoyer un objet et renvoyer un tableau contenant les noms de toutes les variables de l'objet. Si la méthode ne renvoie rien, NULL est sérialisé, ce qui entraîne une erreur E_NOTICE. En revanche, unserialize() vérifie s'il existe une méthode __wakeup. Si elle existe, la méthode __wakeup sera appelée en premier pour préparer les données objet à l'avance.

La méthode __sleep est souvent utilisée pour soumettre des données non validées ou des opérations similaires. En même temps, cette fonction est très utile si vous disposez d’objets volumineux qui n’ont pas besoin d’être enregistrés. __wakeup est souvent utilisé dans les opérations de désérialisation, telles que le rétablissement d'une connexion à une base de données ou l'exécution d'autres opérations d'initialisation.


__toString()

est utilisé pour savoir comment une classe doit répondre lorsqu'elle est traitée comme une chaîne. Par exemple, echo $obj; devrait afficher quelque chose.

Cette méthode doit renvoyer une chaîne, sinon une erreur fatale de niveau E_RECOVERABLE_ERROR sera émise. Les exceptions ne peuvent pas être levées dans la méthode __toString(). Cela entraînerait une erreur fatale.


Il convient de souligner que
Example #2 简单示例<?php// Declare a simple classclass TestClass{
    public function __toString() {
        return &#39;类被当成字符串时tostring返回字符串&#39;;        // return intval(&#39;tostring返回值的内容不为字符串&#39;);//Recoverable fatal error: Method TestClass::__toString() must return a string value
    }
}$class = new TestClass();echo $class;//echo (string)$class; // 未定义 __toString()方法,并将对象转换为字符串,报错Recoverable fatal error: Object of class TestClass could not be converted to string?>
Copier après la connexion
Avant PHP 5.2.0, la méthode __toString() ne pouvait prendre effet que lorsqu'elle était utilisée directement avec echo ou print.

Après PHP 5.2.0, il peut être utilisé dans n'importe quel environnement de chaîne (comme 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) .
À partir de PHP 5.2.0, la conversion d'un objet qui ne définit pas la méthode __toString() en chaîne générera une erreur de niveau E_RECOVERABLE_ERROR.


__invoke()

Lorsque vous essayez d'appeler un objet en appelant une fonction, la méthode __invoke() est automatiquement appelée. (PHP 5.3.0)
mixed __invoke ([ $... ] )
Copier après la connexion

Example #3 使用 __invoke()<?phpclass CallableClass {
    function __invoke($x) {
        var_dump($x);    //int(5)
    }
}$obj = new CallableClass;$obj(5);
var_dump(is_callable($obj));   //bool(true)?>
Copier après la connexion

__set_state()

Recommandations associées :


[php Classes et objets] Traverse

[classes et objets php] Classe anonyme

[classes et objets php] surchargée

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!