内容目录
<?php
/**
* 关于反射类的理解
*/
class Person {
/** type=chenjie */
public $chenjie = 'chenjie00';
/** type=chenjie */
public $chenjie1 = 'chenjie11';
private function getName(){
echo $this->chenjie;
}
public function getName1(){
echo $this->chenjie1;
}
}
//建立 Person这个类的反射类
$class = new ReflectionClass('Person');
//打印所有属性名,包含private,protected,public
$properties = $class->getProperties();
foreach ($properties as $key => $value) {
var_dump($value->getName());
}
//打印所有属性的注释并正则,包含private,protected,public
foreach($properties as $property) {
$docblock = $property->getDocComment();
//只能打印多行注释
var_dump($docblock);
preg_match('/ type\=([a-z_]*) /', $docblock, $matches);
var_dump($matches);
}
//打印所有方法名
foreach ($class->getMethods() as $key => $value) {
var_dump($value->getName());
}
/** 如何执行方法 */
//相当于实例化Person 类
$instance = $class->newInstanceArgs();
//执行getName1方法,方法必须是public属性的,否则会报fatal error
$instance->getName1();
//获取Person getName1方法
$ec=$class->getmethod('getName1');
//执行getName1方法,方法必须是public属性的,否则会报fatal error
$ec->invoke($instance);