>  기사  >  백엔드 개발  >  PHP 리플렉션 클래스 ReflectionClass의 사용 예에 ​​대한 자세한 설명

PHP 리플렉션 클래스 ReflectionClass의 사용 예에 ​​대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-01 10:57:115571검색

이 글은 주로 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 &#39;MycoolPlugin&#39;;
 }
 public static
 function getMenuItems()
 {
  return array(array(&#39;description&#39; => &#39;MycoolPlugin&#39;, &#39;link&#39; => &#39;/MyCoolPlugin&#39;));
 }
 public static
 function getArticles()
 {
  return array(array(&#39;path&#39; => &#39;/MycoolPlugin&#39;, &#39;title&#39; => &#39;This is a really cool article&#39;, &#39;text&#39; => xxxxxxxxx));
 }
}

위 코드는 PHP 리플렉션의 응용 프로그램입니다. 수업.

PHP 리플렉션 클래스란 무엇인가요? 이름에서 알 수 있듯이 클래스 매핑으로 이해될 수 있습니다.

예:

class fuc { //定义一个类
 static
 function ec() {
  echo &#39;我是一个类&#39;;
 }
}
$class=new ReflectionClass(&#39;fuc&#39;); //建立 fuc这个类的反射类

$class 리플렉션 클래스에 대한 내용은 매뉴얼을 확인하세요. 자세한 내용은 여기에서 설명하지 않습니다.

$fuc=$class->newInstance(); //相当于实例化 fuc 类
$fuc->ec(); //执行 fuc 里的方法ec
/*最后输出:我是一个类*/

좀 더 고급 사용법이 있습니다

$ec=$class->getmethod(&#39;ec&#39;); //获取fuc 类中的ec方法
$fuc=$class->newInstance(); //实例化
$ec->invoke($fuc);   //执行ec 方法

위 프로세스는 다음과 같습니다. 너. 사실, 이것은 객체의 메소드를 호출하는 것과 유사합니다 여기서는 반대라는 점을 제외하면 메소드가 먼저 오고 객체가 마지막에 옵니다

위 내용은 PHP 리플렉션 클래스 ReflectionClass의 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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