zoukankan      html  css  js  c++  java
  • 关于类的反射

    关于类的反射


    类的反射:通过实例化后的对象,获得所属的类、这个类有哪些属性、方法等信息。


    反射API:

    class User{
        public $name;
        private $age;
        static $gender;
    
        public function __construct($name='',$age=0,$gender='保密'){
            $this->name = $name;
            $this->age = $age;
            self::$gender = $gender;//注意,这里self::后的变量要写$符号
        }
    
        public function getInfo(){
            return '姓名:'.$this->name.',年龄:'.$this->age;
        }
    
    }
    
    
    $student = new User('zhang_san',12);
    
    
    $reflect = new ReflectionObject($student);
    var_dump($reflect);
    //输出:
    //object(ReflectionObject)[2]
    //  public 'name' => string 'User' (length=4)
    
    //获取$student这个对象所属的类
    var_dump(get_class($student));
    //输出:string 'User'
    
    //获取所属的【类的属性】列表
    $props = $reflect->getProperties();
    foreach ($props as $value) {
        //打印访问权限
        echo $value->isStatic()?'static ':'';
        echo $value->isPublic()?'public':'';
        echo $value->isPrivate()?'private':'';
        echo $value->isProtected()?'protected':'';
        //打印属性名字
        echo ' ' . $value->getName();
        echo '<br>';
    }
    //输出结果:
    // public name
    // private age
    // static public gender
    
    
    //获取所属的【类的方法】列表
    $methods= $reflect->getMethods();
    foreach ($methods as $value) {
        //打印访问权限
        echo $value->isStatic()?'static ':'';
        echo $value->isPublic()?'public':'';
        echo $value->isPrivate()?'private':'';
        echo $value->isProtected()?'protected':'';
        echo $value->isAbstract()?'abstract':'';
    
        //打印属性名字
        echo ' ' . $value->getName();
        echo '<br>';
    }
    //输出结果:
    //public __construct
    //public getInfo

    扩展知识:(关于class的函数)

    var_dump(get_class($student));
    //输出:string 'User'
    
    var_dump(get_object_vars($student));
    // array (size=1)
    //    'name' => string 'zhang_san'
    
    var_dump(get_class_vars(get_class($student)));
    // array (size=2)
    //    'name' => null
    //    'gender' => string '保密'
    
    var_dump(get_class_methods(get_class($student)));
    // array (size=2)
    //    0 => string '__construct'
    //    1 => string 'getInfo'

  • 相关阅读:
    CSS选择器的权重与优先规则
    excel上传--phpExcel读取xls、xlsx
    反射与代理设计模式
    Map集合
    接口实际应用-工厂代理模式
    代码模型:对象比较
    Stream数据流
    集合输出接口-Iterator迭代输出-古老枚举输出:Enumeration
    Set集合接口-HashSet_TreeSet理解
    List类集接口-ArrayList
  • 原文地址:https://www.cnblogs.com/gyfluck/p/13722434.html
Copyright © 2011-2022 走看看