Résumé du code de l'exemple d'application de la méthode magique PHP

伊谢尔伦
Libérer: 2023-03-12 06:16:01
original
1434 Les gens l'ont consulté

Cet article présente principalement un résumé concis de la Méthode magique (Méthode magique) dans les classes PHP. Ces méthodes incluent construct(), destruct(), call(), callStatic(), get(). , set(), toString(), etc. Les amis qui en ont besoin peuvent se référer à

1 construct() et destruct()

lorsque l'instance est créée. /destroyed Lorsqu'il est appelé, zéro ou plusieurs paramètres peuvent être transmis.

class A
 {
  function A()
  {
   echo "build A";
  }

  function destruct()
  {
   echo "destroy A";
  }
 }

 $obj = new A();
 //unset($obj);
Copier après la connexion

Remarque : La méthode destructeur sera appelée dès qu'il n'y aura plus d'autres références à un objet particulier, ou dans n'importe quel ordre pendant la séquence d'arrêt.

À propos du construct Function , à partir de PHP 5.3.3, une méthode nommée avec le nom de la classe dans une classe définie dans un espace de noms spécifique ne sera plus considérée comme un constructeur. Dans une classe sans espace de noms, c'est toujours un constructeur comme avant. Par exemple :

namespace Foo;
class Bar {
  public function Bar() {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
  }
}
Copier après la connexion

S'il n'y a pas d'espace de noms Foo ; alors Bar() sera également utilisé comme constructeur. De plus, si la situation suivante existe :

function construct()
  {
   echo "construct A";
  }

  function A()
  {
   echo "build A";
  }

  function destruct()
  {
   echo "destroy A";
  }
 }
Copier après la connexion

contient à la fois construct() et une fonction portant le même nom que le nom de la classe, alors seule construct() sera appelée.

2. call() et callStatic()

Appelé lors de la tentative d'appel d'une méthode qui n'existe pas. Deux paramètres, l'un est le nom de la méthode et l'autre est le paramètre array de la méthode appelée.

class MethodTest
{
  public function call($name, $arguments)
  {
    // Note: value of $name is case sensitive.
    echo "Calling object method '$name' "
       . implode(&#39; &#39;, $arguments). "<br>";
  }

  public static function callStatic($name, $arguments)
  {
    // Note: value of $name is case sensitive.
    echo "Calling static method &#39;$name&#39; "
       . implode(&#39; &#39;, $arguments). "<br>";
  }
}

$obj = new MethodTest;
$obj->runTest(&#39;in&#39;,&#39;object&#39;,&#39;context&#39;);
MethodTest::runTest(&#39;in&#39;,&#39;static&#39;,&#39;context&#39;);
Copier après la connexion

Parmi eux, $arguments est transmis sous forme de tableau. Résultats d'exécution :

Appel de la méthode objet 'runTest' dans un contexte d'objet
Appel de la méthode statique 'runTest' dans un contexte statique

Faites également attention à la portée de la fonction protected et private :

class TestMagicCallMethod {
  public function foo()
  {
    echo METHOD.PHP_EOL."<br>";
  }

  public function call($method, $args)
  {
    echo METHOD.PHP_EOL."<br>";
    if(method_exists($this, $method))
    {
      $this->$method();
    }
  }
  
  protected function bar()
  {
    echo METHOD.PHP_EOL."<br>";
  }

  private function baz()
  {
    echo METHOD.PHP_EOL."<br>";
  }
}

$test  =  new TestMagicCallMethod();
$test->foo();
/**
 * Outputs:
 * TestMagicCallMethod::foo
 */

$test->bar();
/**
 * Outputs:
 * TestMagicCallMethod::call
 * TestMagicCallMethod::bar
 */

$test->baz();
/**
 * Outputs:
 * TestMagicCallMethod::call
 * TestMagicCallMethod::baz
 */
Copier après la connexion

3.get() et set()

sont appelés lorsqu'on essaie de lire une propriété qui n'existe pas dans un objet.

Remarque : Nous pouvons utiliser cette fonction pour implémenter diverses opérations similaires à la réflexion en Java.

class Test
{
  public function get($key)
  {
   echo $key . " not exists";
  }
  public function set($key,$value)
  {
   echo $key . " = ".$value;
  }
}

$t = new Test();
echo $t->name."<br>";
$t->name = "abc";
Copier après la connexion

Sortie :
le nom n'existe pas
name = abc

toString()

Cette méthode est similaire. La méthode toString() de Java appelle cette fonction lorsque nous imprimons directement l'objet. La fonction doit renvoyer une chaîne.

class Test
{
  private $name = "abc";
  private $age = 12;

  public function toString()
  {
    return "name : $this->name, age : $this->age";
  }
}

$t = new Test();
echo $t;
Copier après la connexion

Sortie :

nom : abc, âge : 12

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