不知何时可以抛弃load->手工调用
CI升级到2.X之后,不再支持PHP4,这是好事儿,但是这种革命并不彻底。PHP5的一些先进特性到现在都没有用起来,最典型的就是load,要使用哪个功能还必须手动加载哪个模块,或者是设定到autoload里面进行预加载。手动load,至少要多键入一行代码,而且在Netbeans之类的高级编辑器下面代码的自动完成功能也不好用起来。
设定在autoload算是预加载,一些不常用的模块也加载进来,无疑让系统臃肿,影响运行效率。
这个问题kohana框架早已经用__autoload魔术方法实现了免手工load,CI也有改造版的,但是没有被官方采纳。而且改造版的虽然可以实现不用load就可以加载方法,但是老的load代码就会失效了,也是个老大难问题。
希望众CIer好好想想办法,撺掇作者在代码自动完成和调用的简易性上下下功夫,让CI用得更爽。
俺感觉挺好的。 代码自动完成对团队开发意义重大,因为你调用的不一定是自己开发出来的娃儿,有了提示,才能更方便地了解和调用别人的类和方法。 我只能说,无语。 真的弱爆了,如果用过代码自动完成,简直有受不了的感觉。 估计是指使用spl_autoload_register。
网上有不少在CodeIgniter中使用spl_autoload_register进行autoload的方法,未听闻这些方法会令原来load失效的说法。加入autoload功能根本不必修改CodeIgniter,是谁聪明得去修改CI?
网上多的是例子。这里有个用hooks来加载autoload class的方法。
http://acairns.co.uk/2011/05/autoloading-resources-in-codeigniter/
要调用autoload,先要有class not found exception,处理exception时要到不同的目录中去找文件,省了一句load的语句,但系统要多耗额外开销去找文件。
PHP自行找文件时,不会知道是model,core还是libraries,要一一去找,若使用HMVC,要找的目录数目可能更多。值不值得,各有看法。
意义重大?
要娃儿,但生娃儿时,还要娃儿自己爬出来罢了。 如果你的方法能够混合用当然最好不过了,我回头试试。
我讲的使用__autoload之后就不能$this->load是指的这个帖子里面讲到的方法:
http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=4443
(1)自动加载models——php5风格
这个技巧希望达到的目标是:
在左边,你会看到在controller里面通常加载model的方法。使用这个技巧以后,我们将能够直接创建这个model对象。
这个代码是简洁的并且容易理解对象。
使用这个技巧以后会有2个影响。首先你不再需要继承model类了。这个技巧,我们需要做的就是添加一个php5风格的 autolader 函数,添加这些代码到system/application/config/config.php:
<?php
// ...
function __autoload($class) {
if (file_exists(APPPATH."models/".strtolower($class).EXT)) {
include_once(APPPATH."models/".strtolower($class).EXT);
}
}
?>
如果你也有兴趣运用这个技巧到controller,你只需要添加以下代码来代替上面的代码。
<?php
// ...
function __autoload($class) {
if (file_exists(APPPATH."models/".strtolower($class).EXT)) {
include_once(APPPATH."models/".strtolower($class).EXT);
} else if (file_exists(APPPATH."controllers/".strtolower($class).EXT)) {
include_once(APPPATH."controllers/".strtolower($class).EXT);
}
}
?>
任何时候,你试着使用一个没有定义的类时候,这个__autoload函数将会被调用,它将会加载这个类文件。 关于不同程序员生出来娃儿,如果给这些娃儿一些自动名单(在代码完成时候列出来),会比把娃放在大幼儿园要好管理的多。因为代码自动完成可以让程序员非常方便地发现和使用别人的娃儿。 我支持 @相知犹按剑 的想法,对于任何能提高开发效率的方案我都支持。
PS: 自动完成有问题,从根本上,我认为是IDE不够聪明导致的,但是解决起来最方便的还是让代码去适应IDE。。。虽然这有点本末倒置,呵呵~ 急盼hex等众高手开发流行ide的ci插件出来,解决这个问题。{:soso_e128:}{:soso_e128:}
页:
[1]