Maison  >  Article  >  développement back-end  >  Bien comprendre la surcharge PHP

Bien comprendre la surcharge PHP

藏色散人
藏色散人avant
2019-10-23 13:24:332029parcourir

La surcharge PHP est différente de la surcharge Java et ne peut pas être confondue. Java autorise plusieurs fonctions portant le même nom dans une classe, et chaque fonction a des paramètres différents, tandis que PHP n'autorise qu'une seule fonction portant le même nom. Par exemple, Java peut avoir plusieurs constructeurs, mais PHP ne peut en avoir qu’un seul.

La surcharge de PHP fait référence à la création dynamique d'attributs et de classes grâce à des méthodes magiques

● Surcharge d'attributs - Surcharge de __get et __set

● méthodes - __call et __callStatic

Par exemple, la classe de requête de Laravel implémente la surcharge d'attributs, rendant le code plus concis

$name = $request->name;

Cet attribut n'existe pas dans la classe, mais est passé par la méthode magique Pour visiter, l'implémentation spécifique est comme suit

public function __get($key)
{
    return Arr::get($this->all(), $key, function () use ($key) {
        return $this->route($key);
    });
}

Cette méthode de mise en œuvre est largement utilisée, et le principe de mise en œuvre est simplement résumé

class Foo
{   
    private $params = [];
    function __construct(array $params = [])
    {
        $this->params = $params;
    }
    public function __set($name, $value)
    {
        $this->params[$name] = $value;
    }
    public function __get($name)
    {
        return $this->params[$name];
    }
    public function __isset($name)
    {
        return isset($this->params[$name]);
    }
    public function __unset($name)
    {
        unset($this->params[$name]);
    }
}

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
Article précédent:fonction anonymeArticle suivant:fonction anonyme