Maison > développement back-end > tutoriel php > Qu'est-ce que le mode proxy ? (Exemple de description)

Qu'est-ce que le mode proxy ? (Exemple de description)

藏色散人
Libérer: 2023-04-05 20:52:01
avant
4618 Les gens l'ont consulté

Mode proxy

Le rôle du mode proxy est similaire à l'héritage, aux interfaces et aux combinaisons, qui visent tous deux à agréger les parties communes et à réduire le code de parties communes.

La différence est que par rapport à l'héritage, leurs contextes sont différents. Le sens que l'héritage veut exprimer est est-a, tandis que le sens que le proxy veut exprimer est plus proche de l'interface, qui est a-a. , et si vous utilisez un proxy En réponse à la phrase « utilisez moins l'héritage et utilisez davantage la combinaison », le sens est en fait de réduire le degré de couplage.

Pour la combinaison, c'est plus flexible que la combinaison. Par exemple, si nous définissons l'objet proxy sur privé, alors je peux choisir de fournir seulement une partie de la fonction proxy, comme une ou deux méthodes d'imprimante, et Ou vous pouvez ajouter d'autres opérations lors de la fourniture de fonctions d'imprimante. Elles sont toutes possibles.

<?php
//代理对象,一台打印机
class Printer { 
    public function printSth() {
        echo &#39;我可以打印<br>&#39;;
    }
}
//这是一个文印处理店,只文印,卖纸,不照相
class TextShop {
    private $printer;
    public function __construct(Printer $printer) {
        $this->printer = $printer;
    }
    //卖纸
    public function sellPaper() {
        echo &#39;give you some paper <br>&#39;;
    }
    //将代理对象有的功能交给代理对象处理
    public function __call($method, $args) {
        if(method_exists($this->printer, $method)) {
            $this->printer->$method($args);
        }
    }
}
//这是一个照相店,只文印,拍照,不卖纸
class PhotoShop {    
    private $printer;
    
    public function __construct(Printer $printer) {
        $this->printer = $printer;
    }
    
    public function takePhotos() {    //照相
        echo &#39;take photos for you <br>&#39;;
    }
    
    public function __call($method, $args) {    //将代理对象有的功能交给代理对象处理
        if(method_exists($this->printer, $method)) {
            $this->printer->$method($args);
        }
    }
}
$printer = new Printer();
$textShop = new TextShop($printer);
$photoShop = new PhotoShop($printer);
$textShop->printSth();
$photoShop->printSth();
Copier après la connexion

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:hcoder.net
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