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文檔操作