php用反射实现多继承
来源:互联网 发布:软件服务费合同模板 编辑:程序博客网 时间:2024/05/16 07:57
<?phpclass multi_extends {public function __construct() {$this->_init_extends ();}protected function _init_extends() {if (property_exists ( $this, '_extends' )) {$extends = &$this->_extends;foreach ( $extends as $class ) {$this->_extends ( $class );}}}public function _extends($class_name) {// 分析目标$ref = new ReflectionClass ( $class_name );// 继承公共属性$property_list = $ref->getProperties ( ReflectionProperty::IS_PUBLIC );foreach ( $property_list as $property ) {$property_name = $property->name;$property_value = $property->getValue ( new $class_name () );if ($property_name === '_extends') {foreach ( $property_value as $c ) {$this->_extends [] = $c;}} else {if (! property_exists ( $this, $property_name )) {$this->{$property->name} = $property_value;}}}// 继承公共方法$method_list = $ref->getMethods ( ReflectionMethod::IS_PUBLIC );foreach ( $method_list as $method ) {$this->_extends_method [$method->name] = $method->class;}}function __call($m, $a) {if ($c = $this->_extends_method [$m]) {eval ( "$c::$m(" . '$a' . ");" );}}}header ( 'content-type:text/html;charset=utf-8' );class a {public $a = 5;public function say_name() {echo '我叫' . $this->name . '<br>';}}class b {function say_age() {echo '我今年' . $this->age . '岁<br>';}}class c extends multi_extends {public $_extends = array ('a','b' );public function say_hellow() {echo 'hellow ' . $this->name . '<br>';}}class d {function say_goodbye() {echo 'goodbye ' . $this->name . '<br>';}}class persion extends multi_extends {public $_extends = array ('c','d' );public $name = "熊宝山";public $age = "20";}// 执行继承后的方法$o = new persion ();$o->say_name ();$o->say_age ();$o->say_hellow ();$o->say_goodbye ();?>
0 0
- php用反射实现多继承
- php利用反射真正实现多继承(非接口模拟)
- php利用反射真正实现多继承(非接口模拟)
- 用反射机制和prototype实现继承
- PHP实现接口多继承
- php使用traits实现代码复用、多继承
- php使用traits实现代码复用、多继承
- 用PHP的反射实现委托模式
- PHP用反射API实现自动加载
- 用继承和反射机制实现业务扩展
- php实现多继承-trait语法
- 扩展实现php继承
- 用php反射实现插件的自动调用
- php用反射API实现了简单的动态代理
- PHP 接口多继承 及 实现类转换成接口
- PHP实现多继承的效果(tarits)
- PHP多继承
- php继承多态
- 一些重要的Page指令
- 【opencv】从视频中获取多帧图像
- 栈和队列操作:栈实现、队列实现、双栈实现队列、双队列实现栈、栈实现O(n)求当前栈最大值
- opencv 提取轮廓大于某个阈值的图像
- XML小型数据库【XMLHelper】
- php用反射实现多继承
- 求四个数的最大公约数
- 送大家一大堆管理、销售、成功类文档
- 用javascript实现对div的拖拽功能的实现过程
- 很好的设计-安全的单例模式
- VB 中使用SendKeys开启Run 窗口和是用API函数去开启Run
- 哈希表和哈希算法
- unix network programming volume1 sorce code build and get(UNIX網絡編程卷1第三版)
- matlab win7 3G开关