>  기사  >  백엔드 개발  >  PHP 리플렉션 클래스 ReflectionClass_php 스킬 활용 분석

PHP 리플렉션 클래스 ReflectionClass_php 스킬 활용 분석

WBOY
WBOY원래의
2016-05-16 08:59:523547검색

이 글의 예에서는 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 코드는 다음과 같습니다.

<&#63;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 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.