이 글은 주로 PHP 리플렉션 클래스의 사용법을 소개합니다. ReflectionClass의 개념, 기능, 구체적인 사용법을 예제 형식으로 자세히 분석합니다. 필요한 친구들이 참고할 수 있습니다.
이 글의 예제는 PHP 반사 클래스 ReflectionClass 사용. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
먼저 코드를 살펴보겠습니다.
/** * @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);
plugin.php 코드는 다음과 같습니다.
<?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)); } }
위 코드는 PHP 리플렉션의 응용 프로그램입니다. 수업.
PHP 리플렉션 클래스란 무엇인가요? 이름에서 알 수 있듯이 클래스 매핑으로 이해될 수 있습니다.
예:
class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类
$class 리플렉션 클래스에 대한 내용은 매뉴얼을 확인하세요. 자세한 내용은 여기에서 설명하지 않습니다.
$fuc=$class->newInstance(); //相当于实例化 fuc 类 $fuc->ec(); //执行 fuc 里的方法ec /*最后输出:我是一个类*/
좀 더 고급 사용법이 있습니다
$ec=$class->getmethod('ec'); //获取fuc 类中的ec方法 $fuc=$class->newInstance(); //实例化 $ec->invoke($fuc); //执行ec 方法
위 프로세스는 다음과 같습니다. 너. 사실, 이것은 객체의 메소드를 호출하는 것과 유사합니다 여기서는 반대라는 점을 제외하면 메소드가 먼저 오고 객체가 마지막에 옵니다
위 내용은 PHP 리플렉션 클래스 ReflectionClass의 사용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!