L'exemple de cet article décrit l'utilisation de la classe de réflexion php ReflectionClass. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Regardons d'abord un morceau de code :
/** * @name PHP反射API--利用反射技术实现的插件系统架构 * @author :PHPCQ.COM */ interface Iplugin { public static function getName(); } function findPlugins() { $plugins = array(); foreach(get_declared_classes() as $class) { $reflectionClass = new ReflectionClass($class); if ($reflectionClass - > implementsInterface('Iplugin')) { $plugins[] = $reflectionClass; } } return $plugins; } function computeMenu() { $menu = array(); foreach(findPlugins() as $plugin) { if ($plugin - > hasMethod('getMenuItems')) { $reflectionMethod = $plugin - > getMethod('getMenuItems'); if ($reflectionMethod - > isStatic()) { $items = $reflectionMethod - > invoke(null); } else { $pluginInstance = $plugin - > newInstance(); $items = $reflectionMethod - > invoke($pluginInstance); } $menu = array_merge($menu, $items); } } return $menu; } function computeArticles() { $articles = array(); foreach(findPlugins() as $plugin) { if ($plugin - > hasMethod('getArticles')) { $reflectionMethod = $plugin - > getMethod('getArticles'); if ($reflectionMethod - > isStatic()) { $items = $reflectionMethod - > invoke(null); } else { $pluginInstance = $plugin - > newInstance(); $items = $reflectionMethod - > invoke($pluginInstance); } $articles = array_merge($articles, $items); } } return $articles; } require_once('plugin.php'); $menu = computeMenu(); $articles = computeArticles(); print_r($menu); print_r($articles);
Le code du plugin.php est le suivant :
<?php class MycoolPugin implements Iplugin { public static function getName() { return 'MycoolPlugin'; } public static function getMenuItems() { return array(array('description' => 'MycoolPlugin', 'link' => '/MyCoolPlugin')); } public static function getArticles() { return array(array('path' => '/MycoolPlugin', 'title' => 'This is a really cool article', 'text' => xxxxxxxxx)); } }
Le code ci-dessus est une application de la classe de réflexion PHP.
Qu'est-ce qu'une classe de réflexion PHP ? Comme son nom l'indique, elle peut être comprise comme un mappage d'une classe.
Par exemple :
class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类
Quant à ce qu'il y a dans la classe de réflexion $class, vous pouvez consulter le manuel, mais je ne l'expliquerai pas en détail ici
$fuc=$class->newInstance(); //相当于实例化 fuc 类 $fuc->ec(); //执行 fuc 里的方法ec /*最后输出:我是一个类*/
Il existe également des utilisations plus avancées
$ec=$class->getmethod('ec'); //获取fuc 类中的ec方法 $fuc=$class->newInstance(); //实例化 $ec->invoke($fuc); //执行ec 方法
Le processus ci-dessus devrait vous être familier. En fait, c'est similaire à la méthode d'appel d'un objet
C'est juste que c'est l'inverse, avec la méthode devant et l'objet derrière
Supplémentaire : Nous recommandons ici un outil de formatage de code PHP en ligne sur ce site Web, qui peut faciliter aux lecteurs la lecture du code PHP compressé formaté en ligne, ce qui est pratique et pratique !
Outil de formatage et d'embellissement du code php en ligne :
http://tools.jb51.net/code/phpformat
Les lecteurs intéressés par davantage de contenu lié à PHP peuvent consulter les sujets spéciaux de ce site : "Collection complète de compétences opérationnelles PHP array (Array)", "Résumé du tri PHP algorithm", " Résumé des algorithmes et techniques de traversée couramment utilisés en PHP", "Tutoriel sur la structure des données et les algorithmes PHP", "Résumé des algorithmes de programmation PHP", "Résumé des mathématiques PHP des compétences opérationnelles ", "Résumé de l'utilisation des expressions régulières php", "Résumé des opérations PHP et de l'utilisation des opérateurs", "Résumé de l'utilisation de la chaîne PHP (string) " et "Résumé des compétences courantes en matière d'exploitation de base de données PHP "
J'espère que cet article sera utile à tout le monde dans la programmation PHP.