Maison >développement back-end >tutoriel php >Explication détaillée des cinq principes du PHP orienté objet : principe ouvert-fermé
Le contenu partagé avec vous dans cet article est une explication détaillée du principe ouvert-fermé des cinq principes orientés objet de PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent se référer à
Prenons le lecteur comme exemple. Définissez d'abord une interface abstraite. Le code est le suivant.
interface process { public function process(); }
Ensuite, étendez cette interface pour implémenter les fonctions de décodage et de sortie, comme indiqué ci-dessous
class playerencode implements process { public function process() { echo "encode",PHP_EOL; } } class playeroutput implements process { public function process() { echo "ouput",PHP_EOL; } }
Les différentes fonctions du lecteur sont ouvertes ici. Tant que vous suivez l'accord et implémentez l'interface du processus, vous pouvez ajouter de nouveaux modules fonctionnels au lecteur. Seuls les modules de décodage et de sortie sont implémentés ici, et d'autres nouveaux modules peuvent être ajoutés en fonction des besoins.
Définissez ensuite le gestionnaire de planification élevée du fil du joueur. Une fois que le joueur reçoit une notification (il peut s'agir d'un comportement de clic externe ou d'un comportement de notification interne), il rappellera le traitement réel du fil.
class playProcess { private $message = null; public function __construct() {} public function callback(event $event) { $this->message = $event->click(); if($this->message instanceof process) { $this->message->process(); } } }
Le produit spécifique est sorti Ici, nous définissons une classe MP4. Cette classe est relativement fermée et définit la logique de traitement des événements. suit
class mp4 { public function work() { $playProcess = new playProcess(); $playProcess->callback(new event('encode')); $playProcess->callback(new event('output')); } }
La dernière est la classe de traitement pour le tri des événements. Cette classe est chargée de trier les événements et de juger le comportement de l'utilisateur ou du interne pour générer un " Thread " correct. " pour la planification par le gestionnaire de race pure intégré au lecteur. Le code est le suivant
class event { private $m; public function __construct($me) { $this->m = $me; } public function click() { switch($this->m) { case 'encode'; return new playerencode(); break; case 'output': return new playeroutput(); break; } } }
Le code qui est finalement exécuté
$mp4 = new mp4; $mp4->work();
Les résultats d'exécution sont les suivants :
encoder la sortie
Comment respecter le principe ouvert-fermé
Le cœur de la réalisation de l'ouvert-fermé est de programmer de manière abstraite, pas concrètement, car l'abstraction est relativement stable . En laissant une classe dépendre d'une abstraction fixe, ces modifications sont fermées ; grâce à des mécanismes d'héritage et de polymorphisme orientés objet, vous pouvez hériter du corps abstrait, modifier le comportement inhérent en remplaçant ses méthodes et implémenter de nouvelles méthodes d'extension, c'est donc le cas. ouvert à l'agrandissement.
1) Appliquer les idées d'« abstraction » et d'« encapsulation » dans le design.
D'une part, il s'agit de trouver différents "facteurs variables" possibles dans le système logiciel et de les encapsuler.
D'un autre côté, un facteur variable ne doit pas être dispersé dans plusieurs modules de code différents, mais doit être encapsulé dans un objet.
2) Appliquer la programmation orientée interface dans la mise en œuvre de la programmation des fonctions système.
Lorsque les exigences changent, une nouvelle classe d'implémentation de cette interface peut être fournie pour s'adapter au changement.
La programmation orientée interface nécessite que des classes fonctionnelles implémentent des interfaces et que des objets soient déclarés comme types d'interface. En mode design, le mode décoration utilise évidemment OCP.
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!