<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[php __call()方法实现数据库连贯操作]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Tue, 08 Mar 2016 03:11:43 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：对的jquery有一种叫链式操作的dom的，而PHP在写sql时也可以使用类似的方法，如：<br/><textarea name="code" class="php" rows="15" cols="100">
&nbsp;&nbsp;&nbsp;&nbsp;/**
&nbsp;&nbsp;&nbsp;&nbsp; * 从数据库获得用户分页专辑记录
&nbsp;&nbsp;&nbsp;&nbsp; *
&nbsp;&nbsp;&nbsp;&nbsp; * @param str&#124;array&nbsp;&nbsp; $where&nbsp;&nbsp; 查询条件
&nbsp;&nbsp;&nbsp;&nbsp; * @param int&nbsp;&nbsp; $page&nbsp;&nbsp;&nbsp;&nbsp;当前页
&nbsp;&nbsp;&nbsp;&nbsp; * @param int&nbsp;&nbsp; $perpage 每页显示的记录数
&nbsp;&nbsp;&nbsp;&nbsp; * @param str&nbsp;&nbsp; $order&nbsp;&nbsp; 排序类型
&nbsp;&nbsp;&nbsp;&nbsp; * @param str&nbsp;&nbsp; $asc&nbsp;&nbsp;&nbsp;&nbsp; 升序/降序
&nbsp;&nbsp;&nbsp;&nbsp; * @return array&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 满足条件的记录
&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;public function getUsersAlbumFromDB($where, $page, $perpage, $order, $asc)
&nbsp;&nbsp;&nbsp;&nbsp;&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$offset = ($page - 1) * $perpage;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dataList = $this-&gt;getSelectObj()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;where($where)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;order($order, $asc)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;limit($perpage, $offset)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;fetchObject();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $dataList;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
</textarea><br/>这种写法有点类似Jquery的链式写法，如下：<br/><textarea name="code" class="php" rows="15" cols="100">
$ (this).find (&quot;div&quot;).css (&quot;background&quot;, &quot;red&quot;).end().siblings ().find (&quot;div&quot;).css (&quot;background&quot;, &quot;green&quot;);
</textarea><br/><br/>__call函数相关介绍：http://jackxiang.com/post/2834/<br/>=================================================<br/>使用__call()方法来实现数据库连贯操作<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
&nbsp;&nbsp;// 使用__call()方法来实现数据库连贯操作
 // 申明一个Db类（数据库操作类）的简单操作模型

class Db&#123;
&nbsp;&nbsp;&nbsp;&nbsp;private $sql = array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;field&quot; =&gt; &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;where&quot; =&gt; &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;order&quot; =&gt; &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;limit&quot; =&gt; &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;group&quot; =&gt; &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;having&quot; =&gt; &quot;&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;// 连贯操作调用field() where() order() limit() group() having()方法，组合sql语句
&nbsp;&nbsp;&nbsp;&nbsp;function __call($methodName,$args)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 将第一个参数(代表不存在方法的方法名称),全部转成小写方式，获取方法名称
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$methodName = strtolower($methodName);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 如果调用的方法名和成员属性数组$sql下标对应上，则将第二个参数给数组中下标对应的元素
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(array_key_exists($methodName,$this-&gt;sql))&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;sql[$methodName] = $args[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;else&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &#039;调用类&#039;.get_class($this).&#039;中的方法&#039;.$methodName.&#039;()不存在&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 返回自己对象，则可以继续调用本对象中的方法，形成连贯操作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;// 输出连贯操作后组合的一个sql语句，是连贯操作最后的一个方法
&nbsp;&nbsp;&nbsp;&nbsp;function select()&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;SELECT &#123;$this-&gt;sql[&#039;field&#039;]&#125; FROM&nbsp;&nbsp;user &#123;$this-&gt;sql[&#039;where&#039;]&#125; &#123;$this-&gt;sql[&#039;order&#039;]&#125; &#123;$this-&gt;sql[&#039;limit&#039;]&#125; &#123;$this-&gt;sql[&#039;group&#039;]&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;$this-&gt;sql[&#039;having&#039;]&#125;&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&#125;

$db = new Db();

// 连贯操作
$db-&gt;field(&#039;sex, count(sex)&#039;)
&nbsp;&nbsp; -&gt;where(&#039;where sex in (&quot;男&quot;,&quot;女&quot;)&#039;)
&nbsp;&nbsp; -&gt;group(&#039;group by sex&#039;)
&nbsp;&nbsp; -&gt;having(&#039;having avg(age) &gt; 25&#039;)
&nbsp;&nbsp; -&gt;select();
?&gt;
</textarea>&nbsp;&nbsp;<br/><br/>---------- 调试PHP ----------<br/>SELECT sex, count(sex) FROM&nbsp;&nbsp;user where sex in (&quot;男&quot;,&quot;女&quot;)&nbsp;&nbsp; group by sex<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;having avg(age) &gt; 25<br/>Output completed (0 sec consumed) - Normal Termination<br/><br/>来自：http://blog.sina.com.cn/s/blog_6109978501017154.html
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] php __call()方法实现数据库连贯操作]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>