이 글의 예에서는 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 Reflection 클래스를 적용한 것입니다.
PHP 리플렉션 클래스란 이름에서 알 수 있듯이 클래스 매핑으로 이해될 수 있습니다.
예:
class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类
Reflection Class $class에 대한 내용은 매뉴얼을 확인하시면 되지만 여기서는 자세히 설명하지 않겠습니다
$fuc=$class->newInstance(); //相当于实例化 fuc 类 $fuc->ec(); //执行 fuc 里的方法ec /*最后输出:我是一个类*/
더욱 고급 용도도 있습니다
$ec=$class->getmethod('ec'); //获取fuc 类中的ec方法 $fuc=$class->newInstance(); //实例化 $ec->invoke($fuc); //执行ec 方法
위의 과정은 익숙할 것입니다. 사실 객체를 호출하는 방법과 비슷합니다
단지 메소드가 앞에 있고 객체가 뒤에 있는 것뿐입니다.
보충 : 이 웹사이트의 온라인 PHP 코드 서식 도구를 추천합니다. 이 도구를 사용하면 독자가 온라인으로 서식이 지정된 압축 PHP 코드를 읽을 수 있어 편리하고 실용적입니다 !
php 코드 온라인 서식 지정 및 미화 도구:
http://tools.jb51.net/code/phpformat
더 많은 PHP 관련 콘텐츠에 관심이 있는 독자는 이 사이트의 특별 주제를 확인할 수 있습니다. "PHP 배열(Array) 작업 기술 종합 모음", "PHP 정렬 요약 알고리즘", " PHP에서 일반적으로 사용되는 순회 알고리즘 및 기술 요약", "PHP 데이터 구조 및 알고리즘 튜토리얼", "PHP 프로그래밍 알고리즘 요약", "PHP 수학 연산 스킬 요약", "PHP 정규식 사용법 요약", "PHP 연산 및 연산자 사용법 요약", "php string(string) 사용법 요약" 및 "일반적인 PHP 데이터베이스 조작 기술 요약"
이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.