onenature 发表于 2012-5-4 01:30:45

PDT使用小技巧-CI自动完成

本帖最后由 onenature 于 2012-5-4 01:39 编辑

写php就用过两ide, 一个是BBEdit, 轻便的文件编辑器, 很好用. 第二个就是 PDT 啦, 试用pdt的时候就是冲着它的代码提示去的. 但下载下来试用后发现, 由于PHP语言的动态特性导致IDE无法正确分析对象的类型而无法提示及自动完成, 让我对PDT失望了好些时候.

但冲着ecllipse的名气想应该是也有解决办法的吧! 于是苦心琢磨了好久, 最终解决提示及自动完成的一些问题.

大家用IDE, 无非就是想提高工作效率. 有了自动完成, 敲回车就显得倍儿有力了!

话说改造是这样滴:

长久以来由于PHP的动态特性, PDT根本没办法知道在运行时某个属性或变量的具体类型是什么. 即然这样, 那就由我们聪明的程序猿来给个提示吧.
比如经常要用到的 $this->input,这个类型就是 CI_Input(). 在默认情况下, 你输入 $this->input-> 后是不会没有任何提示的. 解决办法就是在我们的控制器里的某个位置写上一句 $this->input = new CI_Input(); 我一般放在构造里. 不过, 这样直接 new 一个实例出来显然会和系统冲突, 所以, 正确的写法应该是:
if(FALSE)
{
    $this->input = new CI_Input();
}
用一段永远也不会执行的 if 语句来避开就好了.

有一个特例, 就是 $this->db 这个属性, 它可复杂了, 害我不得不得建立一个辅助文件来帮助我来完成提示功能. 过程是这样的:
先在项目中新建一个目录, 比如 ci_assist. 这个目录呢, 仅仅是为了在IDE中实现提示而设置, 运行中根本不需要. 然后在 ci_assist 目录中添加一个 CIAssist.php 的文件. 接下来, 就是个辛苦活了, 新建一个 CI_IDatabase 的接口, 再把数据库相关的api抄下来{:soso_e127:}, 之后就可以用上面提到的方法来实现提示及自动完成了.
if(FALSE)
{
    $this->db = new CI_IDatabase();// 由于PHP的动态特性, 运行中即使不导入 CI_IDatabase 接口也不会出错, 因为代码根本不会执行
}


嗯, 有了自动完成, 敲回车就显得倍儿有力了!

附上自己常用的一些模板及收集整理的部分数据库操作API供大家下载
呃..写完发现这个:http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=401 自己完全弱爆了. 我面壁去了{:soso_e136:}

页: [1]
查看完整版本: PDT使用小技巧-CI自动完成