标签:框架 类的属性 tac 对象 反射 工资 能力 access 一起
代码,还以之前介绍Java反射的Worker类为例
worker.php:
<?php
class Worker{
//工人的一些属性
private $name_;
private $age_;
private $salary_;
//构造方法
public function __construct($name,$age,$salary){
$this->name_ = $name;
$this->age_ = $age;
$this->salary_ = $salary;
}
//输出工人信息的方法
public function show(){
echo "年龄".$this->salary_;
echo "姓名".$this->name_;
echo "工资".$this->salary_;
}
//__toString方法
public function __toString(){
return "年龄:".$this->age.",姓名:".$this->name."工资:".$this->salary;
}
}
下面可以通过反射机制获取类的信息
注 getObjectOfRuntimeClass.php 该文件和worker.php 在一个文件夹下
<?php
include 'worker.php';
//通过类名获取
$workClass_by_classname = new ReflectionClass('Worker');
//通过类的实例对象获取
$w = new Worker("小明",20,20);
$workerClass_by_classinstance = new ReflectionObject($w);
//因为ReflectionObject是ReflectionClass的子类,所以workClass_by_classname的方法,workerClass_by_classinstance同样适用
//下面利用workClass_by_classname对象获取类的一些属性
//获取类名
echo $workClass_by_classname->getName();
//获取类的方法列表
var_dump($workClass_by_classname->getMethods());
//获取类的属性
var_dump($workClass_by_classname->getProperties());
//利用反射得到方法,并执行该方法
$worker = $workClass_by_classname->newInstance("小明",20,20);
$show_method = new ReflectionMethod('Worker','show');
$show_method->invoke($worker);
//利用反射机制得到属性,并设置值
$property = $workClass_by_classname->getProperty('name_');
$property->setAccessible(true);
var_dump($property->getValue($worker));
$property->setValue($worker ,'小红');
var_dump($property->getValue($worker));
除了这些外,PHP反射还有其他的功能,具体可参考PHP手册的反射部分
如需转载请注明出处:http://www.cnblogs.com/zhuchenglin/p/8890451.html
标签:框架 类的属性 tac 对象 反射 工资 能力 access 一起
原文地址:https://www.cnblogs.com/zhuchenglin/p/8890451.html