Archive for 六月, 2009

杂记一则

无关乎开发,无关乎技术,今日来的一些琐事:

近日来系统频频假死,鼠标时常出现旋转的漏斗,但查遍系统记录无果,几欲放弃排查而重装系统。意外发现问题的元凶竟然是搜狗输入法,仅在4.2C版有这个Bug,更新4.2D或退回老版本即可解决问题。

GoogleReader的统计信息看,在其的订阅用户已经接近100,而Feedsky仅仅显示有60,并且数月来一直没有增加,这让我很奇怪。经排查,由于在一开始没有规划feed,造成现在有三个主要Feed源,从4月开始,对外只提供feed.raychou.com这个源,通过cname指到Feedsky,而其并没有统计到这个url的订阅信息(似乎仅针对GoogleReader)。无奈,取消cname,改为302跳转,然后即可正常统计。

新网又受攻击,DNS全挂,波及本博客,开始考虑是不是要更换DNS服务商。

公司即将搬家,即将搬到一个更加宽阔和舒适的工作环境。但是,路程也更远了,又得继续起早摸黑的日子了。

最近数码置入计划的内容很丰富,但是钱包却恰恰相反,只能慢慢来,从长计议。

杂记么,确实很杂。

PHP连贯接口

什么是连贯接口?经常用jQuery的朋友一定对下面的代码非常熟悉:

$('div').find('element').hide();

像上面这样,在一个方法后直接调用另一个同级方法,我们习惯上称其连贯接口。

连贯接口有什么好处呢?拿我们常用的工厂模式来举例:

$sql= new Joy_Db_SqlBuilder();
$sql->select();
$sql->table('test');
$sql->where('id' , '=' , '1');

换成连贯接口来实现的代码会是怎样呢?

$sql= new Joy_Db_SqlBuilder();
$sql->select()
    ->table('test')
    ->where('id' , '=' , '1');

可以看到在上面的代码中,相对以往的工厂模式的写法,使用连贯接口能稍微节省一些代码量,并且,代码逻辑性也更强。

如何实现连贯接口呢?这里我引用JoyPHP中的一段代码

class Joy_Db_SqlBuilder {
    /**
     * select方法
     * 
     * @return Joy_Db_SqlBuilder
     */
    public function select() {
        $this->_args    = array('method'=>'select');
        return $this;
    }
    /**
     * 定义所用的表名
     *
     * @param string $name
     * @param string $alias
     * @return Joy_Db_SqlBuilder|string
     */
    public function table() {                
        // @todo something
 
        // 返回this,实现连贯接口
        return $this;
    }
}

从代码中可以看到,每个方法都返回了$this,而$this表示的正式Joy_Db_SqlBuilder的实例,因此才可以继续调用其方法。

连贯接口很简单,写起来也很美,但是却遇到一个棘手的问题,类似ZendStudio,Eclipse之类的IDE似乎并不支持连贯接口的自动提示?其实结局的方法也很简单,只要像上面的代码注释那样,遵循PHPDoc的代码注释规范,在@return后注明返回的对象类型,这些IDE也同样能实现自动提示。