关于php反射的问题
来源:互联网 发布:孙楠退赛汪涵救场 知乎 编辑:程序博客网 时间:2024/06/04 23:28
笔者最近刚接触php,所以并没有去学习什么框架,这里就说下笔者自己对php反射的一些经验。
关于什么事反射,这里我就不多说了,学过java的人都知道什么事反射,不知道的人可以自己百度下。
笔者本意是想做一个跟java habernate一样的东西,给一个对象,设置一个模型,然后,我只需要给这些对象里面写入一些值,调用一个方法,把这个对象传入进去后就可以保存了,当然要实现这个功能很容易,也有很多种做法,比如在模型里面把类的全部属性封装到一个数组里面,然后对应赋值也是能实现的。这里感觉有反射做这个事情有点复杂了,但已想到hibernate的好用之处,笔者总有种跃跃欲试的感觉,所以就直接做了。
首先做一个模型类:
class Menu {
private $id ; // 编号
private $topid ; // 上级菜单id(根菜单为0)
private $menuname ; // 菜单名称
private $menuurl ; // 菜单链接地址
private $menuclassid; // 菜单类别id
/**
* 得到当前类的名字
* */
public function getClassName() {
return "Menu";
}
//---------------------------------------
/**
* @return the $id
*/
public function getId() {
return $this->id;
}
/**
* @return the $topid
*/
public function getTopid() {
return $this->topid;
}
/**
* @return the $menuname
*/
public function getMenuname() {
return $this->menuname;
}
/**
* @return the $menuurl
*/
public function getMenuurl() {
return $this->menuurl;
}
/**
* @return the $menuclassid
*/
public function getMenuclassid() {
return $this->menuclassid;
}
/**
* @param field_type $id
*/
public function setId($id) {
$this->id = $id;
}
/**
* @param field_type $topid
*/
public function setTopid($topid) {
$this->topid = $topid;
}
/**
* @param field_type $menuname
*/
public function setMenuname($menuname) {
$this->menuname = $menuname;
}
/**
* @param field_type $menuurl
*/
public function setMenuurl($menuurl) {
$this->menuurl = $menuurl;
}
/**
* @param field_type $menuclassid
*/
public function setMenuclassid($menuclassid) {
$this->menuclassid = $menuclassid;
}
}
然后我们创建一个文件封装所有的sql操作,
由于sql操作太多了,笔者只贴添加功能:
public function add($obj) {
/*反射实现*/
$className = $obj->getClassName();
$ref = new ReflectionClass($className);
$method = $ref->getMethods();
$properties = $ref->getProperties();
$cloumns = "";
$values = "";
for ($i = 1; $i < count($properties); $i++) {
$cloumn = $properties[$i]->name;//得到第一个属性
$method = "get" . ucwords($cloumn);//拼第一个属性的get方法
$cloumns = $cloumns . $cloumn . ", ";//将属性连接,作为表的字段
$reflectionMethod = new ReflectionMethod($className, $method);
$value = $reflectionMethod->invoke($obj);//执行方法
if (is_string($value)) {
$value = "'" . $value . "'";
}
$values = $values . $value . ", ";
}
$cloumns = substr($cloumns,0,strlen($cloumns)-2);
$values = substr($values,0,strlen($values)-2);
$tableName = $this->db_tablePfx . $className;
$sql = "insert into " . $tableName . " (" . $cloumns . " ) " .
"values (" . $values . ")";
$this->setSql($sql);
$this->execute();
$this->colseConn();
}
有了这段添加的代码,不管我吗创建多少个模型class只要来调用就很容易实现了,是不是有点像hibernate呢,呵呵。
如有疑问:联系QQ:572389066
- 关于php反射的问题
- 又一个关于反射的问题
- 关于 T[] 的反射问题
- 关于PHP的问题
- 关于反射加载DLL的问题2
- 关于php的round问题
- 关于PHP的配置问题
- PHP 关于路径的问题
- 关于php的编码问题
- 关于php缓存的问题
- php 关于request的问题
- 关于PHP的session问题
- PHP的反射机制
- PHP的反射机制
- PHP的反射机制
- php的反射
- php的反射
- PHP的反射机制
- 一些常用的Intent及intent-filter的信息
- Windows 环境下配置 Oracle 11gR2 Data Guard 手记
- C#编程利器之调试篇--单步调试、单元测试
- [WCF REST] 一个简单的REST服务实例
- java IO流(创建JAVA 文件列表)
- 关于php反射的问题
- having , group by , order by
- VC中实现程序执行就显示全屏
- JAVA正则表达式语法大全
- [iOS]Objective-C 实用特性索引(Objective-C Feature Availability Index)
- jquery serialize传中文乱码解决方法
- [iOS]日历和提醒编程指南(Calendar and Reminders Programming Guide)
- mysql 触发器学习
- PlayPlusRecharge