php连贯操作实现

我们在使用一些框架(如ThinkPHP)编码的时候,常用到这样的代码。
M('User')->where(array('id'=>1))->field('name')->select();
这样不仅有利于编码,而且也能让人"心情愉悦"呢。好了,不多说了。让我们看看如何实现的吧?
//数据库操作基类[PS:主要功能连贯功能实现]
class Db{
//此属性定义要实现连贯操作的方法名
public $sql = array(
"field" => "",
"where" => "",
"order" => "",
"limit" => "",
"group" => "",
"having" => "",
);

/**
* 连贯操作时,调用field() where() order() limit() group() having()方法且组合成sql语句
* 此方法为PHP魔术方法,调用类中不存在的方法时就会自动调用此方法
* @param $methodName 调用不存在的方法时,接收这个方法名称的字符串
* @param $args 调用不存在的方法时,接收这个方法的参数,以数组形式接收
*/
function __call($methodName,$args){
//把要请求的方法名,统一转为小写
$methodName=strtolower($methodName);
//若请求方法名与成员属性数组$sql下标对应上;则将第二个参数,赋值给数组中"下标对应的元素"

if(isset($this->sql[$methodName])){
$this->sql[$methodName]=$args[0];
}else{
echo '调用类'.get_class($this).'中的'.$methodName.'()方法不存在';
}
//返回对象;从而可以继续调用本对象中的方法,形成连贯操作
return $this;
}

/**
* 用此方法拼接成一个select的sql语句;[PS:此方法终结了连贯操作,置于连贯操作的最后面]
*/
function select(){
//按照select语法拼接sql字符串[PS:可以在mysql命令行中执行"help select;"查看其语法构结]
$sql="SELECT {$this->sql['field']} FROM test {$this->sql['where']} {$this->sql['group']} {$this->sql['having']} {$this->sql['order']} {$this->sql['limit']}";
echo $sql;
}
}

$obj=new db();

$obj->field('name,sex,address')->where('where name="gongwen"')->limit('limit 1')->select();

//输出:SELECT name,sex,address FROM test where name=gongwen limit 1

时间: 2024-09-24 12:23:55

php连贯操作实现的相关文章

PHP类连贯操作的实现方法

PHP中的连贯操作看起来的确很酷,也非常的方便代码的阅读,当然了必须是在OOP中用才行,在过程化的程序中,就没有必要用这种方法了.有实现这个方法的有用_CALL来实现的,而我下面写的这个例子,则不是用_call的,大家可以扩展一下吧. 下面写的这个SQL语句组合类,主要是用于学习的,如果有同学想拿去用,请再完善一下. /* * SQL语句组合实例类,始发文章web开发笔记 * www.chhua.com * 学习用,非专业类 * */ class sql{ private $sql=array(

ThinkPHP3.1快速入门(4)连贯操作

上一篇我们详细描述了查询语言的用法,但是查询语言仅仅解决了查询或者操作条件的问题,更多的配合还需要使用模型提供的连贯操作方法. 介绍 连贯操作可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作,也是ThinkPHP的ORM中的一个亮点.使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: $User->where('status=1')->order('create_time')->limit(1

thinkphp连贯操作实例分析_php实例

本文实例分析了thinkphp连贯操作用法.分享给大家供大家参考.具体分析如下: 一.常用连贯操作,可以接连使用但没前后顺序之分,后面一定要有方法select,updata,delete,find 1.where:帮助我们设置查询条件 2.order:对结果进行排序 复制代码 代码如下: $arr=$m->order('id desc')->select();//字符串方法,默认是asc升序排列,加desc改为降序排列  $arr=$m->order(array('id'=>'de

CodeIgniter连贯操作的底层原理分析_php实例

本文分析了CodeIgniter连贯操作的底层原理.分享给大家供大家参考,具体如下: php oop连贯操作原理 ->符号其实是传递对象指针的.或许这么说是不对的. 但是,我们可以这么的理解. 不多说.放代码. 普通用法: <?php class test { public $a=''; public $b=''; public function actiona() { $this->a="hello"; return $this; } public function

ThinkPHP 3.1快速入门:连贯操作

上一篇我们详细描述了查询语言的用法,但是查询语言仅仅解决了查询或者操作条件的问题,更多的配合还需要使用模型提供的连贯操作方法. 介绍 连贯操作可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作,也是ThinkPHP的ORM中的一个亮点.使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: $User->where('status=1')->order('create_time')->limit(1

ThinkPHP框架模型连贯操作(八)

原文:ThinkPHP框架模型连贯操作(八) Thinkphp的连贯操作使用起来也是很灵活: *可能这里有的mysql函数没全部罗列出来,大家可以举一反三,形式雷同 一.常用连贯操作 1.where帮助我们设置查询条件2.order 对结果进行排序$arr=$m->order('id desc')->select();$arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select(); 多个字段排序 //数组形式查询排序

Laravel框架数据库CURD操作、连贯操作使用方法

Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于表达力. 一.Selects 检索表中的所有行 $users = DB::table('users')->get(); foreach ($users as $user) { var_dump($user->name); } 从表检索单个行 $user = DB::table('users')-&

PHP对象链式操作实现原理分析_php技巧

本文实例讲述了PHP对象链式操作实现原理.分享给大家供大家参考,具体如下: 什么是链式操作呢?使用jQuery的同学印象应该会很深刻.在jQuery中,我们经常会这样的来操作DOM元素: $("p").css("color").addClass("selected"); 连贯操作看起来的确很酷,也非常的方便代码的阅读.那么在PHP里面是否可以实现呢?答案是肯定的,当然了必须是在OOP中用才行,在过程化的程序中,就没有必要用这种方法了. 在PHP中

ThinkPHP中RBAC权限带菜单栏显示和详细权限操作

RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系统的GBAC(GROUP-Based Access Control)的权限管理控制].简单的来说,一个用户可以拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.其对应关系如下: 在许多的实