每日学习笔记(11)
2010-09-30 11:38
375 查看
1,php中反射API应用的一个实例
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php class Person { public $name; function __construct($name) { $this->name = $name; } } interface IModule { function execute(); } class FtpModule implements IModule { function execute() { } function setHost($host) { print "FtpModule::setHost: {$host}\n"; } function setUser($user) { print "FtpModule::setUser: {$user}\n"; } } class PersonModule implements IModule { function execute() { } function setPerson(Person $person) { print "PersonModule::setPerson: {$person->name}\n"; } } class ModuleRunner { private $configData = array("PersonModule" => array('person'=>'bob'), "FtpModule" => array('host' => 'google.com','user' => 'phinecos') ); private $modules = array(); function init() { $interface = new ReflectionClass('IModule'); foreach( $this->configData as $moduleName => $params) { $module_class = new ReflectionClass($moduleName); if ( !$module_class -> isSubclassOf($interface) ) { throw new Exception("unknown module: $moduleName"); } $module = $module_class->newInstance(); foreach( $module_class->getMethods() as $method) { $this->handleMethod($module, $method, $params); } array_push($this->modules, $module); } } function handleMethod(IModule $module, ReflectionMethod $method, $params) { $name = $method->getName(); $args = $method->getParameters(); if (count($args) != 1 || substr($name, 0, 3) != "set") { return false; } $property = strtolower(substr($name, 3)); if ( !isset($params[$property])) { return false; } $arg_class = $args[0]->getClass(); if ( empty($arg_class)) { $method->invoke($module, $params[$property]); } else { $method->invoke($module, $arg_class->newInstance($params[$property])); } } } $test = new ModuleRunner(); $test->init();
相关文章推荐
- 每日学习笔记(11)
- 每日学习笔记(11)
- Linux 学习笔记_11_1_Linux网络设置(上)
- 每日学习笔记(1)
- Java学习笔记(11)Inheritance and Polymorphism
- 《Javascript高级程序设计》(第2版)学习笔记11--BOM
- 学习 严蔚敏讲数据结构笔记11
- OAF学习笔记-11-页面传值(传ID,显示为Name)
- 大数据学习笔记-------------------(11)
- JavaScript高程学习笔记之DOM(10,11,12)
- perl学习笔记-----------------------(11)
- 【DirectX 11 SDK 学习笔记】Shaders and Effect System
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- 11. JAVA常用类库 Part 5 (正则表达式、定时调度、本章要点) ----- 学习笔记
- multism 11学习笔记(一)
- 【电信增值业务学习笔记】11 基于Parlay的增值业务提供技术
- 每日学习笔记(9)
- 【Java学习笔记】11:线程的状态转换1
- spring学习笔记11--事务传播
- 2012-04-14 C#基础学习笔记(11)