<?php
/*2014-03-26
*接 上次发布的<<php 反射API >>====>用反射API 来反射获取一个类的原型
*看下边的代码:
*/
class person{
public $name;
public $gender;
public function say(){
echo $this->name,"\tis",$this->gender,"\r\n";
}
public function __set($name,$value){
echo "Setting $name to $value";
$this->$name=$value;
}
public function __get($name){
if(!isset($this->name)){
echo '未设置';
$this->$name='现在为你设置默认值';
}
return $this->$name;
}
}
$student = new person();
$obj = new ReflectionClass(get_class($student));
$className = $obj->getName();
$Methods = $Properties =array();
foreach($obj->getProperties() as $v){
$Properties[$v->getName()] = $v;
}
foreach($obj->getMethods() as $v){
$Methods[$v->getName()] = $v;
}
echo "class $className \n {\n";
is_array($Properties)&&ksort($Properties);
foreach($Properties as $k=>$v){
echo "\t";
echo $v->isPublic()?'public':'',$v->isProtected()?'protected':'',$v->isPrivate()?'private':'',$v->isStatic()?'static':'';
echo "\t{$k}\n";
}
echo "\n";
is_array($Methods)&&ksort($Methods);
foreach($Methods as $k=>$v){
echo "\tfunction {$k}(){}\n";
}
echo "}\n";
/*输出结果
* class person
{
public gender
public name
function __get(){}
function __set(){}
function say(){}
}
反射还有很多相关类,可参考手册。
未完待续......(下一篇文章根据反射写一个实际运行====简单的动态代理)
*/
?>