Maison >développement back-end >tutoriel php >Php Magic Methods Cheatheet

Php Magic Methods Cheatheet

William Shakespeare
William Shakespeareoriginal
2025-03-07 11:25:09595parcourir

PHP Magic Methods Cheatsheet

Cet article fournit un tableau de recherche rapide des méthodes PHP Magic pour une référence facile.

Que vous soyez un développeur PHP expérimenté ou un débutant dans le développement de PHP, si vous avez utilisé une programmation orientée objet PHP, vous devez avoir utilisé au moins plusieurs méthodes de magie PHP. Si vous n'avez pas entendu parler de la méthode magique de PHP, permettez-moi de l'introduire:

PHP fournit de nombreuses méthodes magiques telles que __destruct(), __callStatic(), __set(), __unset(), __wakeup(), __invoke(), __clone(), __get(), __call(), __serialize(), etc. Évitez d'écrire trop de code dans ces méthodes, pour des considérations de clarté et de maintenance, il est préférable de définir des méthodes bien définies pour l'acquisition et le réglage des membres, ou définir des méthodes de classe. Les méthodes __unserialize() et

nécessitent l'utilisation de propriétés virtuelles.

Exemple:
<?php 
class Student {
    private $name;
    private $email;
    private $phone;
    private $db_connection_link;

    public function __construct($name, $email, $phone) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->phone = $phone;
    }

    public function __serialize()
    {
        return ['name' => $this->name, 'email' => $this->email, 'mobile' => $this->phone];
    }

    public function __wakeup($data)
    {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->phone = $data['mobile'];

        $this->db_connection_link = your_db_connection_function();
    }
}
?>

__wakeup() Il convient de noter que les méthodes __serialize() et __unserialize() ne seront appelées que lorsque la méthode

sera définie en même temps.

__invoke()

Méthode

__invoke()

La méthode magique est une méthode spéciale appelée lorsque vous essayez d'appeler un objet comme une fonction. Voyons d'abord comment cela fonctionne, puis voyons à quoi sert cette méthode magique.
<?php 
class Student {
    private $name;
    private $email;

    public function __construct($name, $email) 
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function __invoke()
    {
        echo 'Student 对象被当作函数调用!';
    }
}

$objStudent = new Student('John', 'john@tutsplus.com');
$objStudent();
?>

$objStudent Comme vous pouvez le voir, l'objet __invoke() est traité comme une fonction, et comme nous avons défini la méthode __invoke(), elle sera appelée au lieu de renvoyer une erreur. L'objectif principal de la méthode

est que vous pouvez implémenter cette méthode si vous souhaitez traiter un objet comme appelant.

__clone()

Méthode

clone Si vous souhaitez copier un objet existant, vous pouvez utiliser le mot-clé __clone(). Mais après le clonage, si vous souhaitez modifier les propriétés de l'objet cloné, vous pouvez définir la méthode magique

dans votre classe.
<?php 
Class Student_School {}

class Student {
    private $name;
    private $email;
    private $object_student_school;

    public function __construct()
    {
        $this->object_student_school = new Student_School();
    }

    public function __clone()
    {
        $this->object_student_school = clone $this->object_student_school;
    }
}

$objStudentOne = new Student();
$objStudentTwo = clone $objStudentOne;
?>

Le problème avec la méthode ci-dessus est qu'il crée une copie peu profonde de l'objet lors du clonage, de sorte que l'objet intérieur de l'objet cloné ne sera pas cloné.

__clone() Dans l'exemple ci-dessus, si vous ne définissez pas la méthode $objStudentTwo, l'objet cloné $objStudentOne pointera toujours vers l'objet Student_School référencé par l'objet __clone(). Par conséquent, en implémentant la méthode Student_School, nous nous assurons que l'objet

est cloné avec l'objet principal.

__debugInfo()

Méthode

__debugInfo() var_dump() La méthode magique est appelée lorsque vous essayez de vider un objet en utilisant la fonction

. Si vous ne définissez pas cette méthode dans la classe, elle videra toutes les propriétés publiques, privées et protégées. Donc, si vous souhaitez limiter les informations affichées lors du vidage, vous pouvez utiliser cette méthode.
<?php 
class Student {
    private $name;
    private $email;
    private $phone;
    private $db_connection_link;

    public function __construct($name, $email, $phone) 
    {
        $this->name = $name;
        $this->email = $email;
        $this->phone = $phone;
    }

    public function __serialize()
    {
        return ['name' => $this->name, 'email' => $this->email, 'mobile' => $this->phone];
    }

    public function __wakeup($data)
    {
        $this->name = $data['name'];
        $this->email = $data['email'];
        $this->phone = $data['mobile'];

        $this->db_connection_link = your_db_connection_function();
    }
}
?>

Cette méthode doit renvoyer un tableau de paires de valeurs clés qui seront affichées lorsque la fonction var_dump() est appelée sur l'objet. Comme vous pouvez le voir, vous avez un contrôle total sur ce que vous souhaitez afficher lors du vidage d'un objet à l'aide de la fonction var_dump().

__set_state() Méthode

La méthode

__set_state() est une méthode statique utilisée avec la fonction var_export(). var_export() Fonction Sortie des informations structurées sur les variables. Lorsque vous exportez une classe en utilisant cette fonction, vous devez définir la méthode __set_state() dans la classe.

<?php 
class Student {
    private $name;
    private $email;

    public function __construct($name, $email) 
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function __invoke()
    {
        echo 'Student 对象被当作函数调用!';
    }
}

$objStudent = new Student('John', 'john@tutsplus.com');
$objStudent();
?>

Comme vous pouvez le voir, la chaîne exportée est un code PHP valide que vous pouvez utiliser pour restaurer l'objet d'origine.

Résumé

Cet article présente toutes les méthodes magiques disponibles en PHP. Pour chaque approche, j'ai fourni un exemple court mais significatif qui devrait vous aider à comprendre son objectif. J'espère que vous pourrez utiliser cet article comme une référence rapide ou une table de recherche rapide dans le développement de PHP quotidien.

Cet article a été mis à jour et contient des contributions de Monty Shokeen. Monty est un développeur complet qui aime également écrire des tutoriels et apprendre de nouvelles bibliothèques JavaScript.

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