博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PHP中的反射模拟框架中控制器的调度

Posted on 2018-10-04 22:54  清水泥沙  阅读(194)  评论(0)    收藏  举报
<?php

class IndexAction {

    public function index() {
        echo 'index';
    }

    public function indexBefore() {
        echo 'indexBefore';
    }

    public function indexAfert() {
        echo 'indexAfert';
    }

    public function sayHello($name) {
        echo "{$name}helloword!";
    }

}

if (class_exists('IndexAction')) {
    $ReflectObj = new ReflectionClass('IndexAction');

    if (!$ReflectObj->hasMethod('index')) {
        throw new Exception('不存在index');
    }
    $ReflectIndex = $ReflectObj->getMethod('index');
    if (!$ReflectIndex->isPublic()) {
        throw new Exception('index不是共有方法');
    }

    if ($ReflectObj->hasMethod('indexBefore')) {
        $ReflectIndexBefore = $ReflectObj->getMethod('indexBefore');
        $ReflectIndexBefore->invoke($ReflectObj->newInstance());
    }

    if ($ReflectObj->hasMethod('sayHello')) {
        $ReflectSayHello = $ReflectObj->getMethod('sayHello');
        $ReflectSayHello->invoke($ReflectObj->newInstance(), '小明');
    }

    if ($ReflectObj->hasMethod('indexAfert')) {
        $ReflectindexAfert = $ReflectObj->getMethod('indexAfert');
        $ReflectindexAfert->invoke($ReflectObj->newInstance());
    }
}

利用反射获取类中的信息,来对类进行制定规则。