php反射通过使用 ReflectionClass类实现。
现在有Hello类:
Hello.php
class Hello {
public $value = 0;
public $name;
public function __construct() {
}
/**
* @return mixed
*/
public function getName()
{
return 'name';
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return int
*/
public function getValue()
{
return $this->value;
}
/**
* @param int $value
*/
public function setValue($value)
{
$this->value = $value;
}
}
在main.php中使用反射
require_once ('Hello.php');
/*
* 建立 Hello 类的反射类
*/
$class = new ReflectionClass('Hello');
/*
* 通过反射类获取 Hello 类实例
*/
$instance = $class->newInstance();
创建ReflectionClass实例,参数为对应的类名,调用ReflectionClass对象的newInstance方法获得Hello类实例。动态的加载了Hello类。
/*
* 通过反射类获取 Hello 类的属性
*/
$properties = $class->getProperties();
foreach($properties as $property) {
echo $property->getName()."<br/>";
}
调用ReflectionClass对象的getProperties获得所有属性,也可以使用getProperty(name)获得具体的某个属性。
/*
* 获取 Hello 类的所有方法
*/
$methods = $class->getMethods();
foreach($methods as $method) {
echo $method->getName().'<br/>';
}
和获得属性类似,调用getMethod(name)可以获得具体某个的方法。
/*
* 获取 Hello 某个方法
*/
$method = $class->getMethod('getName');
echo $method.'<br/>';
/*
* 执行获取到的方法
*/
echo $method->invoke($instance);
通过反射获取某个方法,然后使用invoke调用该方法,参数为获取到的类的实例。
本文介绍如何使用PHP反射机制,通过ReflectionClass类实例化类、获取类的属性和方法,并演示了如何调用类的方法。
1097

被折叠的 条评论
为什么被折叠?



