本文转自:http://blog.kkito.cn/index.php/blog/getArticle/114
之前看到关于php实现reflection时,都是提到了php的reflection api来实现,但这两天突然发现其实根本不用那些reflection api就能非常轻松的实现映射,动态语言的特性还是凸显。
这些方法都可以非常轻松的得到相关的方法名和属性名称。
通过string类型的名字,我们也可以非常方便的判断对象是否拥有该属性或者方法,而且得到这些属性或者调用这些方法也是非常方便的。不仅如此,通过string来new一个对象也是支持的。
Code
1 class Article{
2 function __construct($title , $name){
3 $this->title = $title;
4 $this->name = $name;
5 }
6
7 function show(){
8 echo $this->title;
9 echo "
10 ";
11 }
12 }
13
14 $article = new Article("title" , "name");
15
16 echo isset($article);
17 echo isset($aaa);
18 //check if the object has such property or method
19 echo isset($article->name);
20 echo isset($article->asdfessd);
21 echo property_exists($article , "name");
22 //method_ exists
23
24
25 //get the property or call the method
26 $method = "show";
27 $article->show();
28 $article->$method();
29 $prop = "title";
30 echo $article->$prop;
31
32 //create the object by the giving string name
33
34 echo "---------------------------------
35 ";
36 $objname = "Article";
37 new $objname("1" , "2");
38
39 //also we can use following two methods
40 # call_user_method_array
41 # call_user_method
在自动化执行程序时,reflection非常有用。特别是抽象到了一定高度,自动执行时,这些方法和途径虽然没有reflection api那样oo,那样条理清晰,但使用起来更加方便简洁,和php语言充分融合。