链式调用简介:

链式调用是每个函数最后都返回$this获取当前对象实例,从而实现多次循环引用下一个方法;

如下面这个:

<?phpclassQuery{public$table;public$field;public$limit;publicfunctiontable($table){$this->table=$table;return$this->table;}publicfunctionfield($field){$this->field=$field;return$this->field;}publicfunctionlimit($limit){$this->limit=$limit;return$this->limit;}}$query=newQuery;echo'<pre>';print_r($query->table('list'));echo'<hr>';print_r($query->field('name1,name2'));echo'<hr>';print_r($query->limit(10));echo'<hr>';//若想转为数组$arr=[];$arr['table']=$query->table('list');$arr['field']=$query->table('name1,name2');$arr['limit']=$query->table(10);print_r($arr);?>

可以用链式调用写为:

<?phpclassQuery{public$table;public$field;public$limit;publicfunctiontable($table){$this->table=$table;return$this;}publicfunctionfield($field){$this->field=$field;return$this;}publicfunctionlimit($limit){$this->limit=$limit;return$this;}}$query=newQuery;echo'<pre>';print_r($query->table('list')->field('name1,name2')->limit('10'));?>

链式调用+事件委托实现数据库查询构造器

实例

//被委托的类classQuery{//创建类的唯一实例pdo对象privatestatic$db;//PDO实例protected$table;//表protected$field;//字段protected$limit;//限制行数//把__construct()限制为私有的组织此类在外部进行实例化privatefunction__construct(){}//创建静态连接方法publicstaticfunctionconnect($dsn,$username,$pwd){//创建PDO类的唯一实例pdo对象if(is_null(static::$db)){static::$db=newPDO($dsn,$username,$pwd);}//返回query实例returnnewstatic();}//设置一个table方法给$table属性赋值,并返回当前对象$this;publicfunctiontable($table){$this->table=$table;return$this;}//设置一个field方法给$field属性赋值,并返回当前对象$this;publicfunctionfield($field){$this->field=$field;return$this;}//设置一个limit方法给$limit属性赋值,并返回当前对象$this;publicfunctionlimit($limit){$this->limit=$limit;return$this;}//设置一个getSql拼接一条查询sql语句并返回publicfunctiongetSql(){//返回格式化的结果returnsprintf("SELECT%sFROM%sLIMIT%d",$this->field,$this->table,$this->limit);}//设置一个select查询方法,返回一个静态调用pdo对象用query方法处理方法,以关联数组的方式取结果集publicfunctionselect(){returnstatic::$db->query($this->getSql())->fetchALL(PDO::FETCH_ASSOC);}}//模型类classDb{//方法拦截器去拦截方法委托给Query类执行staticfunction__callStatic($method,$args){//设置数据库链接必要参数$dsn='mysql:host=localhost;dbname=test';//localhost本地或域名或IP,test数据库名名称$username='root';//账号$pwd='root';//密码//获取到被委托的类query实例$query=Query::connect($dsn,$username,$pwd);//返回回调函数将方法给到query中执行returncall_user_func([$query,$method],...$args);}}//链式调用逐个传参最后给到select方法,赋值给变量$res=Db::table('cate')->field('catname,catid')->limit(5)->select();//输出$resecho'<pre>';print_r($res);

运行实例 »

点击 "运行实例" 按钮查看在线实例


更多相关文章

  1. 一个前端后端的综合实例
  2. 数据库连接及事件委托
  3. 关于PHP递归函数以及处理多维数组和目录文件实例
  4. PHP获取两个时间之间的所有日期
  5. 数据库请求委托代理
  6. 补:0811作业 类与对象
  7. 作业内容:oop基础:请举例实例演绎以下难点 1. 类(对象抽象化的结
  8. php面向对象的入门学习(类与对象)
  9. 1. 请实例演绎你对面向对象类与对象关系的理解? 2. 请实例演绎oop

随机推荐

  1. Android学习笔记(四) android 更换桌面壁
  2. Android中编译工具链的改动----LLVM份量
  3. Android调用系统程序
  4. android 中让activity全屏幕显示
  5. android 打开 url 方式
  6. Android PDF 阅读器源码
  7. Android通过摇晃手机的频率来控制声音的
  8. Android View onMeasure 方法
  9. Android 让TextView变成Dialog
  10. Android系统开发之修改调试SystemUI