zoukankan      html  css  js  c++  java
  • ReflectionClass与Closure

    <?php
    /**
     * Class A
     */
    class A{
    
    }
    
    
    $obj = new ReflectionClass('A');
    var_export($obj.PHP_EOL);
    

    类后面加上PHP_EOL会把当前类的详细接口文档打印出来。

    ReflectionClass 可以利用这个动态创建类,动态使用类方法参数。

    try{
    //如果存在控制器名字的类
    if(class_exists($this->getController())) {
    //利用反射api构造一个控制器类对应的反射类
    $rc = new ReflectionClass($this->getController());
    //如果该类实现 了IController接口
    if($rc->implementsInterface('IController')) {
    //该类拥有解析后的action字符串所指向的方法名
    if($rc->hasMethod($this->getAction())) {
    //构造一个控制器类的实例
    $controller = $rc->newInstance();
    //获取该类$action参数所指向的方法对象
    $method = $rc->getMethod($this->getAction());
    //反射类方法对象的调用方式:
    $method->invoke($controller);
    } else {
    //以下为可能抛出异常
    throw new Exception("Action");
    }
    } else {
    throw new Exception("Interface");
    }
    } else {
    throw new Exception("Controller");
    }
        }catch(exception $e)
        {
            echo $e;
        }
    
    

    Closure //闭包的意思。这个跟javascript的闭包有点类似。

    function getClosure(){
    return function(){};
    }
    var_dump(getClosure());//可以看到是一个 Closure Object
    
  • 相关阅读:
    Object类学习
    Thread.State 线程状态
    Thread.UncaughtExceptionHandler
    apply和call的区别
    如何实现border-width:0.5px;
    table固定头部,表格tbody可上下左右滑动
    canvas画布实现手写签名效果
    ES6学习笔记
    for循环中执行setTimeout问题
    javaScript函数提升及作用域
  • 原文地址:https://www.cnblogs.com/canbefree/p/5212531.html
Copyright © 2011-2022 走看看