注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

红尘若梦

生活的色彩

 
 
 

日志

 
 

PHP的反射功能  

2015-11-18 18:41:46|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
JAVA的反射大家都知道,通过反射可以获取一些并不开源的编译类中属性和方法,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。动态获取的信息以及动态调用对象的方法的功能称为反射,操纵面向对象范型中元模型,功能十分强大,可帮助构建复杂,可扩展的应用程序。JAVA的这种反射非常强大,也非常让我们眼热,但好了,同样的PHP5也添加了该功能:Reflection,这下我们也可以爽一把了。
大家来看看下面例子,基本上的用法都展示了下,需要更精深的,请去查看相关参考文档。

<?
//定义一个类
class Site {
public $id="1";
/** type=primary_autoincrement */
private $name="我就上乐乐吧";
/** type=varchar length=50 null */
protected $url="http://593668.com";
/** type=varchar length=255 null */
public function getId(){return $this->id; }
public function setId($v) {$this->id = $v; }
public function getName() { return $this->name; }
public function setName($v) { $this->name = $v; }
public function getUrl() { return $this->url; }
public function setUrl($v) { $this->url = $v; }
}
$class = new ReflectionClass('Site');//建立Site这个类的反射类
$instance = $class->newInstanceArgs();//相当于实例化Site类
//获取属性(Properties):
$properties = $class->getProperties();
foreach($properties as $property) {
echo $property->getName()."\n";
}
//获取注释
foreach($properties as $property) {
if($property->isProtected()) {
$docblock = $property->getDocComment();
preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);
echo $matches[1]."\n";
}
}
//获取类的方法
$methods = $class->getMethods();
foreach($methods as $method) {
echo $method->getName()."\n";
}
//执行类的方法
echo $instance->getName() ."\n"; //方法1,执行Site里的方法getName
$instance->setName("就上乐乐吧");//方法1,执行Site里的方法setName
echo $instance->getName() ."\n";
$ec=$class->getmethod('getName'); //方法2,获取Site类中的getName方法
echo $ec->invoke($instance)."\n"; //执行getName 方法
?>

一些加过密的PHP类文件也可以尝试去调用其中的方法了,当然在一些JSON,数组对象转类的方法中,也可以据此来生成非常灵活的转换工具类,这样我们写的程序功能更加强大,也更加灵活了,小伙伴们,赶紧来练练手吧。
  评论这张
 
阅读(102)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017