返回顶部

收藏

Zend Framework、ThinkPHP中连贯操作的实现

更多

Zend Framework、ThinkPHP中常常见到如下形式的代码:$User->where('id=1')->field('id,name,email ')->find();$this->view->baseUrl这样的操作是不是很酷,操作也比较直观方便。下面就来研究下:先研究下,为什么能$User->wh ere('id=1')->field('id,name,email')->find();这样调用呢? 因为wher,field方法都返回的是$User啊.其实就是这样public function where($where){return $this;}public function field($field){return $this;}这样不就返回了对象自己吗?既然都返回了对象自己,那么调用field方法那肯定也是可以的撒。既然知道了为什么可以这样,那么就来看看实例吧!

连贯操作实例

<?php
class Test
{
    protected $options = array();

    //这里就是了, 通过判断调用的函数名, 如果存在, 那么设置参数, 返回自己 
    public function __call($func, $args)
    {
        if (in_array($func, array( 
            'form', 
            'field', 
            'join', 
            'order', 
            'where', 
            'limit', 
            '更多....' 
        )))
        {
            $this->options[$func] = $args;
            return $this; //这里返回了本对象 
        }
    }
}
$test = new Test();
$test->form('test'); // 这样调用就相当于设置 $test->options['form'] = 'test'; 
//在ThinkPHP中这种连贯操作都是以find或者findAll结尾的. 
//所以前面这些方法的调用只是在设置查询的参数而已 
//在find或者findAll方法中, 是根据$this->options参数的不同执行不同的SQL 
//比如这样 
public function find() { 
$sql = \"SELECT {$this->options['field']} FROM {$this->options['form']}\"; 
$sql .= isset($this->options['where']) ? \" WHERE {$this->options['where']}\" : ''; 
// More  
echo $sql; 
} 

标签:Zend,Framework,ThinkPHP,PHP

收藏

0人收藏

支持

0

反对

0