php 反射机制(一)
反射的定义:
反射是指程序可以访问、检测和修改它本身状态或行为的一种能力。
反射可以做什么:
- 获取类型的相关信息
- 动态调用方法
- 动态构造对象
- 从程序集中获得类型
在PHP中反射有两种方式:
Introspection函数
Introspection Functions是用来操作object class的一些函数,PHP提供了大量的Introspection Functions来操作class, interface, trait, method, property:
- class_exists()
- method_exists()
- property_exists()
- trait_exists()
- class_alias()
- get_class()
- get_parent_class()
- get_called_class()
- get_class_methods()
- get_class_vars()
- get_object_vars()
- is_subclass_of()
- is_a
example:
<?php
/**
* @param class_exists(); 类是否存在
* @param get_class(); 返回对象的类名
* @param get_parent_class();返回对象的类的父类名
* @param is_subclass_of();检查一个对象是否是父类定义的子类
*
*/
class Introspection
{
public function description() {
echo "我是父类";
}
}
class Child extends Introspection
{
public function description() {
echo "我自己" . get_class($this) , "<br>";
echo "我要获取父类:" . get_parent_class($this) , "<br>";
}
}
if (class_exists("Introspection")) {
$introspection = new Introspection();
echo "类名是: " . get_class($introspection) . "是父类"."<br>";
$introspection->description();
}
if (class_exists("Child")) {
$child = new Child();
$child->description();
if (is_subclass_of($child, "Introspection")) {
echo "Yes, " . get_class($child) . "是Introspection的子类";
}
else {
echo "No, " . get_class($child) . " 不是Introspection的子类";
}
}
Introspection 的其它方法可以自行查看PHP文档操作