|
本帖最后由 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 一个实例出来显然会和系统冲突, 所以, 正确的写法应该是:
PHP复制代码 if(FALSE)
{
$this->input = new CI_Input();
} 复制代码
用一段永远也不会执行的 if 语句来避开就好了.
有一个特例, 就是 $this->db 这个属性, 它可复杂了, 害我不得不得建立一个辅助文件来帮助我来完成提示功能. 过程是这样的:
先在项目中新建一个目录, 比如 ci_assist. 这个目录呢, 仅仅是为了在IDE中实现提示而设置, 运行中根本不需要. 然后在 ci_assist 目录中添加一个 CIAssist.php 的文件. 接下来, 就是个辛苦活了, 新建一个 CI_IDatabase 的接口, 再把数据库相关的api抄下来{:soso_e127:}, 之后就可以用上面提到的方法来实现提示及自动完成了.
PHP复制代码 if(FALSE)
{
$this->db = new CI_IDatabase(); // 由于PHP的动态特性, 运行中即使不导入 CI_IDatabase 接口也不会出错, 因为代码根本不会执行
} 复制代码
嗯, 有了自动完成, 敲回车就显得倍儿有力了!
附上自己常用的一些模板及收集整理的部分数据库操作API供大家下载
呃..写完发现这个: http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=401 自己完全弱爆了. 我面壁去了{:soso_e136:}
|
|