php 通过__callStatic魔术方法实现方法的动态创建和延迟绑定
2014-03-23 13:29
941 查看
<?php /* *面向对象魔术方法__callstatic方法的使用 *static 延迟绑定 */ assert_options(ASSERT_ACTIVE, 1);//允许使用assert()函数 abstract class ActiveRecord{ protected static $table; protected $fieldvalues; public $select; static function findById($id){ $query= "select * from " .static::$table ." where id = $id"; return self::createDomain($query); } function __get($fieldname){ return $this->fieldvalues[$fieldname]; } static function __callStatic($method,$args){ $field=preg_replace('/^findBy(\w*)$/','${1}',$method); $query = "select * from " .static::$table ." where $field='$args[0]'"; return self::createDomain($query); } private static function createDomain($query){ $klass = get_called_class(); $Customer = new Customer(); $domain = new $klass(); $domain->fieldvalues = array(); $domain->select = $query; foreach($klass::$fields as $field=>$type){ $domain->fieldvalues[$field] = 'TODO:set from sql result'; } return $domain; } } class Customer extends ActiveRecord{ protected static $table='custdb'; protected static $fields=array( 'id'=>'int' , 'email'=>'varchar', 'lastname'=>'varchar' ); public function getval(){ return self::$fields; } } class Sales extends ActiveRecord{ protected static $table='salesdb'; protected static $fields=array( 'id'=>'int' , 'item'=>'varchar', 'qty'=>'int' ); } assert("select * from custdb where id = 123" == Customer::findById(123)->select); assert("TODO:set from sql result" == Customer::findById(123)->email); assert("select * from salesdb where id = 321" == Sales::findById(321)->select); assert("select * from custdb where Lastname='Denoncourt'" == Customer::findByLastname('Denoncourt')->select); ?>
相关文章推荐
- PHP实现动态创建XML文档的方法
- PHP使用方法重载实现动态创建属性的get和set方法
- PHP使用方法重载实现动态创建属性的get和set方法
- CCRenderTexture(动态创建纹理类 ---通过OpenGL方法 可以实现截屏功能)
- PHP使用方法重载实现动态创建属性的get和set方法
- JBPM流程通过Aciton动态创建TaskInstance来实现“会签”
- js实现动态创建txt框。今天学生问此问题,做个小例子,大家也说说还有什么实现的方法。
- PHP实现通过中文字符比率来判断垃圾评论的方法
- php创建桌面快捷方式实现方法
- PHP实现动态删除XML数据的方法示例
- php实现从上传文件创建缩略图的方法
- 在PHP中通过POST方法实现文件上传功能
- 《JBPM流程通过Aciton动态创建TaskInstance来实现“会签”》2
- php静态延迟绑定的实现
- phpmailer绑定邮箱的实现方法
- PHP实现通过get方式识别用户发送邮件的方法
- php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
- [VB.NET]反射问题,怎么通过动态创建的控件得到控件的方法!
- jQuery 绑定事件到动态创建的元素上的方法实例