Maison  >  Article  >  développement back-end  >  Résumer et organiser les méthodes magiques en php

Résumer et organiser les méthodes magiques en php

WBOY
WBOYavant
2022-04-15 12:50:225279parcourir

Cet article vous apporte des connaissances pertinentes sur PHP. Il présente principalement des problèmes liés aux méthodes magiques et résume la méthode de construction __construct, la méthode de destructeur __destruct, la méthode de clonage __clone, etc.

Résumer et organiser les méthodes magiques en php

Étude recommandée : "Tutoriel vidéo PHP"

Explication détaillée des méthodes magiques en php, Il existe une sorte de méthode en php, qui est très étrange, c'est-à-dire tant que certaines conditions sont remplies rencontré, il sera exécuté tout seul, c'est-à-dire les méthodes Magic en php,

1. __construct méthode de construction

  • Il sera appelé lorsque la classe est instanciée
  • En termes simples, lorsqu'une nouvelle classe est créée, ceci La méthode sera exécutée automatiquement
<?php
class autofelix 
{
    public function __construct()
    {
        echo &#39;我是类autofelix&#39;;
    }
}

new autofelix();

//即可输出:我是类autofelix

2. __ destruct de la méthode de destructeur

  • Décollé automatiquement lorsque la classe est détruite
  • Vous pouvez utiliser la méthode non définie pour déclencher cette méthode
<?php
class autofelix 
{
    public function __destruct()
    {
        echo &#39;我准备销毁你了&#39;;
    }
}

$a = new autofelix();
unset($a);

//即可输出:我准备销毁你了

3. __clone Méthode de clonage

  • Déclenché automatiquement lorsque la classe est clonée Appel
<?php
class autofelix 
{
    public function __clone()
    {
        echo &#39;我克隆了你&#39;;
    }
}

$a = new autofelix();
clone $a;

//即可输出:我克隆了你

4. __call méthode d'appel non statique

  • Lorsque la méthode à appeler n'existe pas ou que les autorisations sont insuffisantes, elle sera automatiquement appelée
  • Pour Par exemple, j'appelle une méthode privée modifiée à l'intérieur de la classe depuis l'extérieur de la classe
<?php
class autofelix 
{
    private function say() 
    {
        echo &#39;hello, 我是autofelix&#39;;
    }

    public function __call($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

$a = new autofelix();
$a->say(); //按理说应该报错

//即可输出:你无权调用say方法

5. __callMéthode d'appel statique statique

  • Elle sera appelée automatiquement lorsque la méthode statique à appeler n'existe pas ou n'a pas d'autorisations suffisantes
  • .
  • Par exemple, j'appelle une méthode statique modifiée privée à l'intérieur de la classe depuis l'extérieur de la classe
<?php
class autofelix 
{
    private static function say() 
    {
        echo &#39;hello, 我是autofelix&#39;;
    }

    public function __callStatic($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

$a = new autofelix();
$a::say(); //按理说应该报错

//即可输出:你无权调用say方法

6, méthode d'impression __debugInfo

  • Cette méthode sera appelée lorsque l'objet de classe var_dump()
  • Si cette méthode n'est pas défini, var_dump() imprimera tous les attributs de classe
<?php
class autofelix 
{
    public function __debugInfo()
    {
        echo &#39;你看不到我任何信息的~&#39;;
    }
}

var_dump(new autofelix());

//即可输出:你看不到我任何信息的~

7. __get obtient la méthode des attributs de membre

  • à travers laquelle vous pouvez obtenir des propriétés de membre privées en dehors de l'objet
<?php
class autofelix 
{
    private $name = &#39;autofelix&#39;;

    public function __get($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo '不是什么东西都能访问的~';
        }
    }
}

$a = new autofelix();
$a->name;

//即可输出:autofelix

8. __méthode isset

  • sera automatiquement appelé lorsque isset() ou empty() est appelé sur une propriété inaccessible
<?php
class autofelix 
{
    private $name = &#39;autofelix&#39;;

    public function __isset($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo '不是什么东西都能访问的~';
        }
    }
}

$a = new autofelix();
isset($a->name);

//结果: autofelix

9 La méthode __set

  • sera déclenchée lors de l'attribution d'une valeur à une propriété non définie
<?php
class autofelix 
{
    public function __set($name, $value)
    {
        echo &#39;你想给&#39; . $name . &#39;赋值&#39; . $value;
    }
}

$a = new autofelix();
$a->name = 'autofelix';

//结果: 你想给name赋值autofelix;

10. __invoke méthode

  • L'objet lui-même ne peut pas être utilisé directement comme fonction
  • Si l'objet est traité comme L'appel de fonction déclenchera cette méthode
<?php
class autofelix 
{
    public function __invoke()
    {
        echo &#39;你还想调用我?&#39;;
    }
}

$a = new autofelix();

//对象直接当函数调用
$a();

//结果: 你还想调用我?

11. __la méthode sleep

  • sera automatiquement appelée lors de la sérialisation () est appelé en dehors de la classe
<?php
class autofelix 
{
    public function __sleep()
    {
        echo &#39;弄啥嘞~&#39;;
    }
}

$a = new autofelix();

serialize($a);

//结果: 弄啥嘞~

12. Méthode __toString

  • Que doit-on retourner lorsqu'une classe est traitée comme une chaîne ? Un type de chaîne doit être renvoyé ici, sinon une erreur fatale sera signalée. être automatiquement appelée
  • <?php
    class autofelix 
    {
        public function __toString()
        {
            return &#39;我是你得不到的对象...&#39;;
        }
    }
    
    $a = new autofelix();
    echo $a;
    
    //结果: 我是你得不到的对象...
Quatorze, __wakeup method

sera automatiquement appelée lorsque la méthode unserialize() est exécutée
  • <?php
    class autofelix 
    {
        private $name = &#39;autofelix&#39;;
    
        public function __unset($name)
        {
            echo &#39;想删我? 你也配?&#39;;
        }
    }
    
    $a = new autofelix();
    unset($a->name);
    
    //结果: 想删我? 你也配?
    Apprentissage recommandé : "Tutoriel vidéo 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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer