zoukankan      html  css  js  c++  java
  • php的反射

    我们可以在PHP运行时,通过PHP的反射动态的获取类的方法、属性、参数等详细信息。
     
    用途:插件的设计,文档的自动生成,扩充PHP语言。
    <?php
    class Person {
        const weightUnit = 'kg';
        const heightUnit = 'cm';
        public $name = 'test';
        public $age = 1;
        public function say($msg = '') {
            echo $msg;
        }
    }
    
    $p = new Person ();
    // 普通的实例化对象,调用方法
    $p->say ( 'hello' );
    
    // 创建一个Person的反射类
    $rp = new ReflectionClass ( 'Person' );
    
    // 通过ReflectionClass的方法来获取类的详细信息
    
    // 获取常量
    echo $rp->getConstant ( 'weightUnit' );
    // 获取类中已定义的常量
    var_dump ( $rp->getConstants () );
    
    // 获取属性,返回的是一个ReflectionProperty类
    $propName = $rp->getProperty ( 'name' );
    echo $propName->getName(), ':', $propName->getValue ( new Person () );
    
    // 获取类中已定义的一组属性
    $propArr = $rp->getProperties ();
    foreach ( $propArr as $obj ) {
        echo $obj->getName (), ':', $obj->getValue ( new Person () );
    }
    
    //获取方法,返回的是一个ReflectionMethod类
    $sayMetd = $rp->getMethod('say');
    if($sayMetd->isPublic() && !$sayMetd->isAbstract()) {
        $sayMetd->invoke(new Person(), 'hehe');
        $sayMetd->invokeArgs(new Person(), array('hehe'));
    }
    
    //获取类中已定义的一组方法,可以过滤不需要的方法
    $metds = $rp->getMethods();
    
    //获取命名空间
    echo $rp->getNamespaceName();
    
    //判断一个方法是否定义
    if($rp->hasMethod('say')) {
        echo 'say has';
    }
    
    //判断一个属性是否定义
    if($rp->hasProperty('name')) {
        echo 'name has';
    }
    
  • 相关阅读:
    修改MySQL密码
    struts入门
    监听
    游戏外挂教程(转)
    “无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性 “之解决
    C# PropertyGrid控件应用心得
    登录时的"记住我"
    自动登录、记住我(保存登陆状态)实现
    UpdatePanel的使用方法
    asp.net中使用基于角色role的Forms验证
  • 原文地址:https://www.cnblogs.com/jkko123/p/6294627.html
Copyright © 2011-2022 走看看