【澳门葡京备用网址】PHP的反光机制,PHP的反光机制实例详解

正文实例汇报了PHP的反光机制。分享给咱们供大家参照他事他说加以考察,具体如下:

介绍:

PHP5加多了一项新的意义:Reflection。这些效应使得phper能够reverse-engineer
class, interface,function,method and
extension。通过PHP代码,就能够拿走某object的持有音讯,并且能够和它交互。
反射是何许?
它是指在PHP运市场价格况中,扩展分析PHP程序,导出或提收取关于类、方法、属性、参数等的详细音讯,满含注释。这种动态获取的音信以及动态调用对象的法子的效应称为反射API。反射是调节面向对象范型凉月模型的API,其功能极其强有力,可扶助大家创设复杂,可扩展的运用。
其用途如:自动加载插件,自动生成文书档案,乃至可用来扩大PHP语言。
php反射api由若干类组成,可帮助大家用来拜候程序的元数据也许同有关的讲授交互。借助反射我们得以获得诸如类完结了那么些方法,创设三个类的实例(不一样于用new成立),调用一个情势(也差异于常规调用),传递参数,动态调用类的静态方法。
     
反射api是php内建的oop本事扩张,包蕴部分类,格外和接口,综合选择他们可用来帮衬我们分析任何类,接口,方法,属性,方法和扩充。这个oop增加被称作反射。
      通过ReflectionClass,大家得以得到Person类的以下消息:
     1)常量 Contants
     2)属性 Property Names
     3)方法 Method Names静态
     4)属性 Static Properties
     5)命名空间 Namespace
     6)Person类是或不是为final大概abstract

出处:

正文地址

介绍:

例子

class Person {  
    /** 
     * For the sake of demonstration, we"re setting this private
     */ 
    private $_allowDynamicAttributes = false;

    /** type=primary_autoincrement */
    protected $id = 0;

    /** type=varchar length=255 null */
    protected $name;

    /** type=text null */
    protected $biography;

        public function getId()
        {
            return $this->id;
        }
        public function setId($v)
        {
            $this->id = $v;
        }
        public function getName()
        {
            return $this->name;
        }
        public function setName($v)
        {
            $this->name = $v;
        }
        public function getBiography()
        {
            return $this->biography;
        }
        public function setBiography($v)
        {
            $this->biography = $v;
        }
}

接下去反射它,只要把类名”Person”传递给ReflectionClass就足以了:

$class = new ReflectionClass('Person');//建立 Person这个类的反射类
$instance  = $class->newInstanceArgs($args);//相当于实例化Person 类

PHP5增加了一项新的功力:Reflection。那几个作用使得phper能够reverse-engineer
class, interface,function,method and
extension。通过PHP代码,就可以获得某object的富有新闻,何况能够和它交互。
反射是什么样?
它是指在PHP运转情状中,扩大分析PHP程序,导出或提抽取关于类、方法、属性、参数等的详细音讯,包涵注释。这种动态获取的音讯以及动态调用对象的点子的职能称为反射API。反射是调控面向对象范型中元模型的API,其效果极其强硬,可帮助我们创设复杂,可扩充的选用。
其用途如:自动加载插件,自动生成文书档案,以致可用来扩充PHP语言。
php反射api由若干类组成,可帮忙大家用来会见程序的元数据只怕同相关的申明交互。借助反射大家得以博得诸如类实现了那叁个方法,创造三个类的实例(分歧于用new成立),调用一个措施,传递参数,动态调用类的静态方法。
反射api是php内建的oop工夫增添,包含部分类,卓殊和接口,综合选用他们可用来救助大家深入分析任何类,接口,方法,属性,方法和扩展。这几个oop扩张被称呼反射。
通过ReflectionClass,大家得以获得Person类的以下新闻:
1)常量 Contants
2)属性 Property Names
3)方法 Method Names静态
4)属性 Static Properties
5)命名空间 Namespace
6)Person类是或不是为final恐怕abstract

享受提纲:

PHP5加多了一项新的效应:Reflection。那么些作用使得phper可以reverse-engineer
class, interface,function,method and
extension。通过PHP代码,就足以获取某object的有着音信,而且能够和它交互。

1)获取属性(Properties):

$properties = $class->getProperties();
foreach($properties as $property) {
    echo $property->getName()."\n";
}
// 输出:
// _allowDynamicAttributes
// id
// name
// biography

暗中同意情形下,ReflectionClass会获取到持有的属性,private 和
protected的也得以。即使只想获取到private属性,将在特别传个参数:
$private_properties =
$class->getProperties(ReflectionProperty::IS_PRIVATE);
可用参数列表:
               ReflectionProperty::IS_STATIC
               ReflectionProperty::IS_PUBLIC
               ReflectionProperty::IS_PROTECTED
澳门葡京备用网址,               ReflectionProperty::IS_PRIVATE
     假设要相同的时候获得public 和private
属性,就像此写:ReflectionProperty::IS_PUBLIC |
ReflectionProperty::IS_PROTECTED。
   通过$property->getName()可以收获属性名。

class Person {        /**       * For the sake of demonstration, we"re setting this private      */       private $_allowDynamicAttributes = false;         /** type=primary_autoincrement */      protected $id = 0;         /** type=varchar length=255 null */      protected $name;         /** type=text null */      protected $biography;             public function getId()          {              return $this->id;          }          public function setId($v)          {              $this->id = $v;          }          public function getName()          {              return $this->name;          }          public function setName($v)          {              $this->name = $v;          }          public function getBiography()          {              return $this->biography;          }          public function setBiography($v)          {              $this->biography = $v;          }  } 

【澳门葡京备用网址】PHP的反光机制,PHP的反光机制实例详解。  1. 介绍

反射是何许?

2)获取注释:

 通过getDocComment可以赢得写给property的注释。

foreach($properties as $property) {
    if($property->isProtected()) {
        $docblock = $property->getDocComment();
        preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);
        echo $matches[1]."\n";
    }
}
// Output:
// primary_autoincrement
// varchar
// text

接下去反射它,只要把类名”Person”传递给ReflectionClass就足以了:

  2. 现实事例

它是指在PHP运市价况中,扩张深入分析PHP程序,导出或提收取有关类、方法、属性、参数等的详细音讯,满含注释。这种动态获取的消息以及动态调用对象的点子的效用称为反射API。反射是决定面向对象范型桐月模型的API,其职能十三分强硬,可援助大家创设复杂,可增添的施用。

3)获取类的形式

取得格局(methods):通过getMethods() 来获得到类的持有methods。

    $class = new ReflectionClass;//建立 Person这个类的反射类      $instance  = $class->newInstanceArgs($args);//相当于实例化Person 类  

    2.1 创建Persion类

其用途如:自动加载插件,自动生成文书档案,以至可用来扩充PHP语言。

4)实施类的艺术:

$instance->getBiography(); //执行Person 里的方法getBiography
//或者:
$ec=$class->getmethod('getName');  //获取Person 类中的getName方法
$ec->invoke($instance);       //执行getName 方法

1)获取属性(Properties):

$properties = $class->getProperties();  foreach($properties as $property) {      echo $property->getName()."\n";  }  // 输出:  // _allowDynamicAttributes  // id  // name  // biography

私下认可情状下,ReflectionClass会获取到具备的属性,private 和
protected的也得以。借使只想获取到private属性,将在极其传个参数:
$private_properties =
$class->getProperties(ReflectionProperty::IS_PRIVATE);
可用参数列表:
ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE
假若要同不平日间获得public 和private
属性,就这么写:ReflectionProperty::IS_PUBLIC |
ReflectionProperty::IS_PROTECTED。
因而$property->getName()能够获得属性名。

    2.2 反射进程

php反射api由若干类组成,可协理大家用来访谈程序的元数据大概同相关的注释交互。借助反射大家得以获得诸如类完毕了那么些方法,创造一个类的实例(不一样于用new创造),调用三个措施(也差异于常规调用),传递参数,动态调用类的静态方法。

2)获取注释:

通过getDocComment能够获得写给property的批注。

    foreach($properties as $property) {          if($property->isProtected {              $docblock = $property->getDocComment();              preg_match('/ type\= /', $property->getDocComment(), $matches);              echo $matches[1]."\n";          }      }      // Output:      // primary_autoincrement      // varchar      // text  

    2.3 反射后接纳

反射api是php内建的oop技术扩大,蕴含一些类,相当和接口,综合使用他们可用来救助我们剖析任何类,接口,方法,属性,方法和扩充。那几个oop增加被称之为反射。

3)获取类的艺术

收获格局:通过getMethods() 来收获到类的具有methods。

var_dump($class->getmethods;//获取类中所有方法

 

透过ReflectionClass,大家得以博得Person类的以下讯息:

4)实践类的秘籍:

    $instance->getBiography(); //执行Person 里的方法getBiography      //或者:      $ec=$class->getmethod('getName');  //获取Person 类中的getName方法      $ec->invoke($instance);       //执行getName 方法  

1.
介绍

1)常量 Contants
2)属性 Property Names
3)方法 Method Names静态
4)属性 Static Properties
5)命名空间 Namespace
6)Person类是不是为final恐怕abstract


例子

  –
PHP5加多了一项新的意义:Reflection。这些意义使得phper能够reverse-engineer
class, interface,function,method and
extension。通过PHP代码,就足以拿走某object的具备消息,况兼能够和它交互。
  – 反射是何许?
它是指在PHP运市场价格况中,扩展剖析PHP程序,导出或提抽出有关类、方法、属性、参数等的详细音信,包蕴注释。这种动态获取的新闻以及动态调用对象的秘诀的效应称为反射API。反射是调整面向对象范型兰月模型的API,其成效极度强有力,可帮衬我们营造复杂,可扩充的运用。
其用途如:自动加载插件,自动生成文书档案,以至可用来扩展PHP语言。
php反射api由若干类组成,可支持我们用来访谈程序的元数据依旧同有关的解说交互。借助反射我们能够获得诸如类完毕了这一个方法,成立叁个类的实例(不一样于用new创造),调用贰个办法(也区别于常规调用),传递参数,动态调用类的静态方法。
     
反射api是php内建的oop技巧增加,包蕴部分类,十分和接口,综合采用他们可用来帮衬大家解析任何类,接口,方法,属性,方法和扩张。那么些oop扩充被称为反射。
      通过ReflectionClass,我们能够获得Person类的以下音信:
     1)常量 Contants
     2)属性 Property Names
     3)方法 Method Names静态
     4)属性 Static Properties
     5)命名空间 Namespace
     6)Person类是不是为final只怕abstract

class Person {
  /**
   * For the sake of demonstration, we"re setting this private
   */
  private $_allowDynamicAttributes = false;
  /** type=primary_autoincrement */
  protected $id = 0;
  /** type=varchar length=255 null */
  protected $name;
  /** type=text null */
  protected $biography;
    public function getId()
    {
      return $this->id;
    }
    public function setId($v)
    {
      $this->id = $v;
    }
    public function getName()
    {
      return $this->name;
    }
    public function setName($v)
    {
      $this->name = $v;
    }
    public function getBiography()
    {
      return $this->biography;
    }
    public function setBiography($v)
    {
      $this->biography = $v;
    }
}

2.
具体育赛事例

接下去反射它,只要把类名”Person”传递给ReflectionClass就能够了:


$class = new ReflectionClass('Person');//建立 Person这个类的反射类
$instance = $class->newInstanceArgs($args);//相当于实例化Person 类

 

1)获取属性(Properties):

始建一个Person类,然后采纳ReflectionClass反射它

$properties = $class->getProperties();
foreach($properties as $property) {
  echo $property->getName()."\n";
}
// 输出:
// _allowDynamicAttributes
// id
// name
// biography

 

默许意况下,ReflectionClass会获取到具备的品质,private 和
protected的也能够。如若只想取获得private属性,将在拾贰分传个参数:

   2.1)【创建Persion类】

$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);

    

可用参数列表:

澳门葡京备用网址 1澳门葡京备用网址 2

ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE

class Person {    
    /** 
         * For the sake of demonstration, we"re setting this private
         */
    private $_allowDynamicAttributes = false;  
    /** type=primary_autoincrement */
    protected $id = 0;  
    /** type=varchar length=255 null */
    protected $name;  
    /** type=text null */
    protected $biography;  
    publicfunction getId()  
            {  
    return $this->id;  
            }  
    public function setId($v)  
            {  
    $this->id = $v;  
            }  
    public function getName()  
            {  
    return $this->name;  
            }  
    public function setName($v)  
            {  
    $this->name = $v;  
            }  
    public function getBiography()  
            {  
    return $this->biography;  
            }  
    public function setBiography($v)  
            {  
    $this->biography = $v;  
            }  
    }

假诺要同时获得public 和private
属性,就这样写:ReflectionProperty::IS_PUBLIC |
ReflectionProperty::IS_PROTECTED。

Persion

通过$property->getName()能够赢得属性名。

 

2)获取注释:

  2.2)【反射进程】
接下去反射它,只要把类名”Person”传递给ReflectionClass就足以了:

经过getDocComment能够获取写给property的批注。

 

foreach($properties as $property) {
  if($property->isProtected()) {
    $docblock = $property->getDocComment();
    preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);
    echo $matches[1]."\n";
  }
}
// Output:
// primary_autoincrement
// varchar
// text
1     $class = new ReflectionClass('Person');//建立 Person这个类的反射类
2     $instance  = $class->newInstanceArgs($args);//相当于实例化Person 类

3)获取类的措施

 

得到格局(methods):通过getMethods() 来获取到类的具有methods。

   2.3)【反射后使用】

4)施行类的主意:

    2.3.1)获取属性(Properties)

 

    $properties = $class->getProperties();  
    foreach($properties as $property) {  
    echo $property->getName()."\n";  
    }  
    // 输出:
    // _allowDynamicAttributes
    // id
    // name
    // biography

 

暗中认可处境下,ReflectionClass会获取到全部的品质,private 和
protected的也得以。假若只想取获得private属性,将要分外传个参数:
$private_properties =
$class->getProperties(ReflectionProperty::IS_PRIVATE);
可用参数列表:
               ReflectionProperty::IS_STATIC
               ReflectionProperty::IS_PUBLIC
               ReflectionProperty::IS_PROTECTED
               ReflectionProperty::IS_PRIVATE
     假如要同不时间获取public 和private
属性,就如此写:ReflectionProperty::IS_PUBLIC |
ReflectionProperty::IS_PROTECTED。
   通过$property->getName()能够拿走属性名。

    2.3.2)【获取注释】

 

  通过getDocComment能够博得写给property的注释。

 

 1     foreach($propertiesas$property) {  
 2     if($property->isProtected()) {  
 3     $docblock = $property->getDocComment();  
 4             preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);  
 5     echo$matches[1]."\n";  
 6         }  
 7     }  
 8     // Output:
 9     // primary_autoincrement
10     // varchar
11     // text

 

$instance->getBiography(); //执行Person 里的方法getBiography
//或者:
$ec=$class->getmethod('getName'); //获取Person 类中的getName方法
$ec->invoke($instance);    //执行getName 方法

    2.3.3)【获取类的诀窍】

    获取格局(methods):通过getMethods() 来获得到类的装有methods。

更加多关于PHP相关内容感兴趣的读者可查看本站专项论题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总计》、《PHP网络编程本事总括》、《PHP数组(Array)操作技艺大全》、《php字符串(string)用法总计》、《php+mysql数据库操作入门教程》及《php常见数据库操作手艺汇总》

    2.3.4)【实行类的艺术】

 

1         $instance->getBiography(); //执行Person 里的方法getBiography
2         //或者:
3         $ec=$class->getmethod('getName');  //获取Person 类中的getName方法
4         $ec->invoke($instance);       //执行getName 方法

愿意本文所述对大家PHP程序设计有所支持。

你只怕感兴趣的篇章:

  • PHP管理重视(dependency)关系工具
    Composer的自动加载(autoload)
  • PHP
    反射机制达成动态代理的代码
  • PHP反射机制原理与用法详解
  • PHP反射机制用法实例
  • PHP中的reflection反射机制测验例子
  • PHP使用反射机制落到实处查找类和艺术的所在地点
  • 实例介绍PHP的Reflection反射机制
  • PHP基于反射机制实现插件的可插拔设计详解
  • 浅谈PHP的反光机制
  • PHP的反射类ReflectionClass、ReflectionMethod使用实例
  • PHP基于反射机制落到实处全自动重视注入的艺术详解

相关文章

发表评论

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

*
*
Website