初识反射API
来源:互联网 发布:淘宝店铺进货渠道 编辑:程序博客网 时间:2024/05/20 17:41
反射api是php内建的oop技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些oop扩展被称为反射,位于php源码/ext/reflection目录下。可以使用反射api自省反射api本身(这可能就是反射最初的意思,自己“看”自己)
反射API的用处有以下:
检查类,是类的不可或缺的测试工具。
eg:
$reflectionclass=new ReflectionClass('Person');
Reflection::export($reflectionclass);
根据命名规则创建一个调用模板类中方法的框架。
下面是反射API的部分类:
Reflection ReflectionClass ReflectionMethod ReflectionProperty ReflectionParameter ReflectionFunction
ReflectionExtension ReflectionException
:::::::::::引用实例::::::::::
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 = new computeMenu();
$articles = new 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));
}
}
反射API的用处有以下:
检查类,是类的不可或缺的测试工具。
eg:
$reflectionclass=new ReflectionClass('Person');
Reflection::export($reflectionclass);
根据命名规则创建一个调用模板类中方法的框架。
下面是反射API的部分类:
Reflection ReflectionClass ReflectionMethod ReflectionProperty ReflectionParameter ReflectionFunction
ReflectionExtension ReflectionException
:::::::::::引用实例::::::::::
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 = new computeMenu();
$articles = new 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));
}
}
- 初识反射API
- 反射-初识
- 初识反射
- 初识API
- 反射API
- 反射API
- 反射API
- 初识.net反射技术
- 初识反射机制
- Java反射之初识
- Java反射机制初识
- 初识Java反射机制
- 反射的初识
- Java(8)--初识反射
- 初识java反射机制
- Java反射机制初识
- 初识Java反射
- 初识java反射机制
- JS之逻辑运算问题
- 今天是一个平常的日子
- 一个简单的WEB流程图组件
- C++模板编译
- 深入Java核心 Java内存分配原理精讲
- 初识反射API
- excelpanel--extjs中嵌入excel,并封装简单操作
- 【书籍推荐】深入体验Java Web开发内幕——核心基础
- BNU12889阶梯博弈
- 新手java面向对象(三)
- 【Windows编程】如何判断操作系统是64位还是32位
- 数据源
- 【书籍推荐】Java邮件开发详解
- syntax highlighting