Rumah >pembangunan bahagian belakang >tutorial php >Analisis penggunaan kelas refleksi php kemahiran ReflectionClass_php
Contoh dalam artikel ini menerangkan penggunaan kelas refleksi php ReflectionClass. Kongsikan dengan semua orang untuk rujukan anda, butirannya adalah seperti berikut:
Mari kita lihat sekeping kod dahulu:
/** * @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);
kod plugin.php adalah seperti berikut:
<?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)); } }
Kod di atas ialah aplikasi kelas refleksi PHP.
Apakah kelas refleksi PHP? Seperti namanya, ia boleh difahami sebagai pemetaan kelas.
Contohnya:
class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类
Mengenai apa yang ada dalam kelas refleksi $class, anda boleh menyemak manual, tetapi saya tidak akan menerangkannya secara terperinci di sini
$fuc=$class->newInstance(); //相当于实例化 fuc 类 $fuc->ec(); //执行 fuc 里的方法ec /*最后输出:我是一个类*/
Terdapat juga beberapa kegunaan yang lebih maju
$ec=$class->getmethod('ec'); //获取fuc 类中的ec方法 $fuc=$class->newInstance(); //实例化 $ec->invoke($fuc); //执行ec 方法
Proses di atas sepatutnya biasa. Malah, ia serupa dengan kaedah memanggil objek
Cuma ia adalah sebaliknya, dengan kaedah di hadapan dan objek di belakang
Tambahan : Di sini kami mengesyorkan alat pemformatan kod PHP dalam talian di tapak web ini, yang boleh memudahkan pembaca membaca kod PHP termampat yang diformatkan dalam talian, yang mudah dan praktikal !
alat pemformatan dan pengindahan dalam talian kod php:
http://tools.jb51.net/code/phpformat
Pembaca yang berminat dengan lebih banyak kandungan berkaitan PHP boleh menyemak topik khas tapak ini: "Koleksi komprehensif kemahiran operasi tatasusunan (Array) PHP", "Ringkasan pengisihan PHP algoritma", " Ringkasan algoritma dan teknik traversal yang biasa digunakan dalam PHP", "struktur data PHP dan tutorial algoritma", "Ringkasan algoritma pengaturcaraan PHP", "matematik PHP Ringkasan kemahiran operasi ", "Ringkasan penggunaan ungkapan biasa php", "Ringkasan operasi PHP dan penggunaan operator", "Ringkasan penggunaan rentetan php (rentetan) " dan "Ringkasan kemahiran operasi pangkalan data PHP biasa "
Saya harap artikel ini akan membantu semua orang dalam pengaturcaraan PHP.