Maison  >  Article  >  développement back-end  >  La base de l'implémentation d'AOP en PHP

La base de l'implémentation d'AOP en PHP

不言
不言original
2018-07-04 17:04:452956parcourir

Cet article présente principalement les bases de l'implémentation de l'AOP en PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

AOP est la continuation de la POO et de l'Aspect Oriented. Programmation. L'abréviation de signifie programmation orientée aspect, et certains l'appellent également programmation orientée aspect. La programmation orientée aspects est utile dans le développement au niveau de l'entreprise. Par exemple, avant d'appeler certaines méthodes, nous devons créer un enregistrement de journal, et après avoir appelé la méthode, nous avons également besoin d'un enregistrement de journal. Voyons d'abord comment nous pouvons l'implémenter en PHP sans utiliser AOP.

<?php
/**
 * 日志类 
 */
 class SystemLog {    
 function beforeLog() {        
 // write before log    
 }    
    function afterLog() {       
     // write after log    
     }
} 
/**
 * 新闻类 
 */
 class News extends SystemLog {    
 function add() {        
 $this->beforeLog();        
 // add news
        $this->afterLog();
    } 
    function delete() {        
    // delete news   
     }
}

Nous définissons une classe de journal, qui contient deux méthodes beforeLog() et afterLog(), qui sont utilisées pour enregistrer avant et après l'appel de la méthode . Log, nous définissons ensuite la classe news, qui hérite de la classe log. Pour terminer la journalisation avant et après l'appel de la méthode add(), il suffit d'appeler les méthodes beforeLog() et afterLog() dans la méthode add(). Bien que nous implémentions la journalisation avant/après l'appel de la méthode add(), un tel code n'est pas du tout élégant dans la programmation POO, et il viole également l'idée de "couplage faible, cohésion forte", car add( sous la classe News ) La méthode ne doit faire qu'ajouter des nouvelles, puis nous enregistrons le journal dans la méthode add(). De plus, si nous devons ajouter des fonctions de journalisation à plusieurs méthodes, alors beforeLog() et afterLog() seront appelés plusieurs. times. ), qui apporte beaucoup de code en double.

En PHP5, si une méthode non définie est appelée, la méthode _call() sera automatiquement appelée. Profitant de cette fonctionnalité de PHP5, nous pouvons implémenter la programmation AOP dans la méthode _call(). Ce type de programmation AOP n'est qu'un prototype d'AOP et n'est pas aussi puissant que Java.

<?php
/**
 * 日志类 
 */
 class SystemLog {    
 function _call($method,$args) {        
 $method = "_$method"; // 在要调用的方法名前加‘_’,$method为要调用的方法名
        // write before log
        $return = call_user_func_array(array($this, $method), $args);        
        // write after log 
        return $return;
    } 
} 
/**
 * 新闻类 
 */
 class News extends SystemLog {    
 function _add() {        
 // add news    
 } 
    function delete() {        
    // delete news    
    }
}

La classe news hérite toujours de la classe log Il convient de noter que nous avons ajouté '_' avant la méthode add(). code lié à la journalisation.

$news = new News();
$news->add();

Appelez la méthode add() dans la classe News Notez qu'il n'y a pas de méthode add() dans la classe News réécrite, seulement _add(. ), si PHP ne trouve pas la méthode add(), il appellera automatiquement la méthode _call(). La méthode _call() a deux paramètres. Le premier paramètre est le nom de la méthode appelée et le deuxième paramètre est le nom. de la méthode appelée. Pour les paramètres de la méthode, dans la méthode _call(), ajoutez d'abord '_' avant le nom de la méthode appelée. Ici, la méthode après avoir ajouté '_' devient _add. dans la classe News. , puis écrivez le journal des appels pré-méthode, puis utilisez la fonction call_user_func_array() pour exécuter l'appel de méthode pré-objet. Une fois l'appel de méthode terminé, écrivez le journal des appels post-méthode.

Avec le recul, nous avons utilisé les conventions de programmation et la fonctionnalité de PHP5 selon laquelle l'appel d'une méthode non définie appellera automatiquement la méthode _call() pour implémenter AOP. Cependant, l'AOP ici n'est qu'un prototype et la fonction n'est pas puissante. C'est suffisant. Avec le développement de PHP, je pense que PHP sera plus puissant en AOP à l'avenir.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Analyse de la pensée AOP de 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:
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