• 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 0

    PHP反射类 ReflectionClass

    Posted by 撒得一地 on 2016年2月1日 in PHP笔记
    上一篇:
    下一篇:
    国外稳定加速器推荐    Express | Vypr

    最近碰到一个PHP反射类函数ReflectionClass,发现其功能很多,非常好用,下面做下总结。

    什么是PHP反射类,字面上可以简单的理解为一个类的映射。官方文档给出的解释是,ReflectionClass 类报告了一个类的有关信息。什么鬼?解释后还是感觉有点抽象??吹揭桓龈ㄋ椎慕馐?,反射返回的对象类(class)的元数据对象(包含class的所有属性/方法的元数据信息),但不是该类本身;类似于查到了类的户口档案,但户口档案不是类本身!如果还是有点抽象,直接看例子会好点:

    class member_service {
        const TYPE_ADMIN = 1; 
        const TYPE_REGISTER = 2; 
        const TYPE_TOURIST = 3;
    
        private $age = 21;
        public $name = 'jack';
    
        private function fun1() {
            echo "这是一个私有函数!";
        }    
    
        public function fun2() {
            echo "这是个公共函数!";
        }    
    }
    

    然后创建一个member_service反射类:

    $class = new ReflectionClass('member_service');
    

    如果你想获取反射类中的某个常量,可以调用反射类方法:public mixed getConstant ( string $name ),比如:

    //获取TYPE_REGISTER这个常量的值
    echo $class-> getConstant('TYPE_REGISTER'); //输出2
    

    如果你想获取反射类中全部常量的值,可以调用反射类方法:public array getConstants ( void ),该方法以数组的形式返回全部常量的值,比如:

     print_r($class-> getConstants());
    
     //输出结果
     /*
     Array
    (
        [TYPE_ADMIN] => 1
        [TYPE_REGISTER] => 2
        [TYPE_TOURIST] => 3
    )
     */
    

    如果想获得反射类属性,可以使用:public array getDefaultProperties ( void ),该反射类方法以数组键值对的形式返回,比如:

    print_r($class->getDefaultProperties()); 
    
    /*输出结果:
    Array
    (
        [age] => 21
        [name] => jack
    )
    */
    

    如果想获得反射类下面的某个具体方法,可以使用:public ReflectionMethod getMethod ( string $name ),比如:

    echo  $class->getMethod('fun1');
    
    /*输出结果:
    Method [  private method fun1 ] {
      @@ /usercode/file.php 16 - 18
    }
    */ 
    

    如果想获得反射类下面的所有方法,可以使用:public array getMethods ([ int $filter ] ),将以数组的形式返回结果,比如:

    print_r($class->getMethods());
    
    /*输出结果
    Array
    (
        [0] => ReflectionMethod Object
            (
                [name] => __construct
                [class] => member_service
            )
        [1] => ReflectionMethod Object
            (
                [name] => fun1
                [class] => member_service
            )
        [2] => ReflectionMethod Object
            (
                [name] => fun2
                [class] => member_service
            )
    )*/
    

    如果想根据反射类,生成具体类实例,可以使用:public object newInstance ( mixed $args [, mixed $… ] )或者使用
    public object newInstanceArgs ([ array $args ] ),比如:

    //相当于实例化 member_service 类  
    $new_instance = $class->newInstance();
    var_dump($new_instance);
    
    /*上面输出:
    object(member_service)#2 (2) {
      ["age":"member_service":private]=>
      int(21)
      ["name"]=>
      string(4) "jack"
    }
    */
    

    可以对生成的实例类进行方法调用,和new生成类时调用方法一致,比如:

    $new_instance->fun2();
    $new_instance->fun1();
    
    /*上面输出:
    这是个公共函数!PHP Fatal error:  Call to private method member_service::fun1() 
    from context '' in /usercode/file.php on line 32
    */
    

    和new一样,实例化的类不能调用私有方法和属性。

    关于反射类的方法还有很多,更多的方法可以参考官方文档://www.php.net/manual/zh/class.reflectionclass.php。

    标签:

    上一篇:

    下一篇:

    相关推荐

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    4 + 6 = ?

    网站地图|广东快乐10分开奖直播

    Copyright © 2015-2019 广东快乐10分开奖直播 All rights reserved.
    闽ICP备15015576号-1,版权所有?psz.

  • 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 网上买彩票 排列三开机号p3开机号 极速快3和值规律 秒速飞艇早上几点开始 哪里可以玩韩国快乐8 七星彩预测i爱彩网 赌博机 体彩11选5走势图 真钱炸金花 七星彩开奖直播 七星彩论坛1840期规律 重庆时时彩改名为欢乐生肖 北京赛车pk10 足彩半全场赔率 喜乐彩几个有钱 上海时时乐号码走势