ReflectionClass类
<?php
class A{
public $publicAttr = "publicAttrValue";
protected $protectedAttr = "protectedAttrValue";
private $privateAttr = "privateAttrValue";
public function __construct(){
$this->privateAttr = "privateAttrValueConstruct";
}
public function publicFunction(){
echo "publicFunction";
}
private function privateFunction(){
echo "privateFunction";
}
protected function protectedFunction(){
echo "protectedFunction";
}
/**
* test方法
*/
public function test($a,$b){
echo $a.$b;
$this->privateFunction();
}
}
$obj = new ReflectionClass(new A());
// 相当于实例化A类
$instance = $obj->newInstance();
//$instance->test(1,2);
// 获取A类中所有的方法
$methods = $obj->getMethods();
$docComment = [];
foreach($methods as $method){
// 获取方法里面的注释 没有注释的方法 返回false
$docComment[] = $method->getDocComment();
}
// 获取A类中的所有属性
$properties = $obj->getProperties();
// 获取一个类的方法
$method = $obj->getMethod('test');
// 执行一个带参数的方法
$method->invokeArgs($instance,['a','b']);
echo "\n";
// 获取一个类的方法
$method = $obj->getMethod('publicFunction');
// 执行一个不带参数的方法
$method->invoke($instance);
// 判断某个方法是否是公共的(public)
$a = new A();
$method = new \ReflectionMethod($a,'test');
$res = $method->isPublic();
//var_dump($res);
// 获取方法里面的参数
$parameters = $method->getParameters();
// 获取方法里面参数的个数
$numberOfParameters = $method->getNumberOfParameters();
var_dump($numberOfParameters);