用户
 找回密码
 入住 CI 中国社区
搜索
楼主: bardo
收起左侧

[讨论/交流] CodeIgniter缺陷探讨

[复制链接]
发表于 2008-6-19 13:17:09 | 显示全部楼层
关于数据库类的继承是可以实现的,而且是在不修改任何源代码的情况下,我已经实现了,扩展 AR 和驱动的功能,而不是用什么 Helper,直接从原始类继承。
发表于 2008-6-19 13:18:20 | 显示全部楼层
关于 PHP4 和 PHP5 的代码是否分开,这也是智者见智仁者见仁的事情,我想 CI 官方肯定是有自己的想法。
发表于 2008-6-19 15:23:06 | 显示全部楼层
我是新手不发言,但是也要表示支持下。

希望沧老大过来也发表下看法。
 楼主| 发表于 2008-6-19 22:31:01 | 显示全部楼层

题外话

http://www.treacle.cn/
这个好象是CI的一个改进版。但是,可惜的是,未能从根本上解决CI中众多的缺陷
发表于 2008-6-19 22:44:16 | 显示全部楼层
那 CI 的分支 Kohana 怎么样呢?感觉 Kohana 很有前途。
 楼主| 发表于 2008-6-19 23:03:04 | 显示全部楼层

Kohana 很有前途

从某种程度上来说,Kohana现在还未被国人完全接受。在国内比不上CI,但是,我想,随首PHP4的消失,真正的PHP5面向对象深入人心,那么,接受Kohana 的人会越来越多。
最关键是代码给了用户多少信心?这是CI目前最为缺少的。当然,CI给了用户其它框架所不能给的很多东西。这不能不说是CI的长处。但是,请看:

class CI_Upload {
       
        var $max_size                = 0;
        var $max_width                = 0;
        var $max_height                = 0;
        var $allowed_types        = "";
        var $file_temp                = "";
        var $file_name                = "";
        var $orig_name                = "";
        var $file_type                = "";
        var $file_size                = "";
        var $file_ext                = "";
        var $upload_path        = "";
        var $overwrite                = FALSE;
        var $encrypt_name        = FALSE;
        var $is_image                = FALSE;
        var $image_width        = '';
        var $image_height        = '';
        var $image_type                = '';
        var $image_size_str        = '';
        var $error_msg                = array();
        var $mimes                        = array();
        var $remove_spaces        = TRUE;
        var $xss_clean                = FALSE;
        var $temp_prefix        = "temp_file_";
               
        /**
         * Constructor
         *
         * @access        public
         */
        function CI_Upload($props = array())
        {
                if (count($props) > 0)
                {
                        $this->initialize($props);
                }
               
                log_message('debug', "Upload Class Initialized");
        }
       
        // --------------------------------------------------------------------
       
        /**
         * Initialize preferences
         *
         * @access        public
         * @param        array
         * @return        void
         */       
        function initialize($config = array())
        {
                $defaults = array(
                                                        'max_size'                        => 0,
                                                        'max_width'                        => 0,
                                                        'max_height'                => 0,
                                                        'allowed_types'                => "",
                                                        'file_temp'                        => "",
                                                        'file_name'                        => "",
                                                        'orig_name'                        => "",
                                                        'file_type'                        => "",
                                                        'file_size'                        => "",
                                                        'file_ext'                        => "",
                                                        'upload_path'                => "",
                                                        'overwrite'                        => FALSE,
                                                        'encrypt_name'                => FALSE,
                                                        'is_image'                        => FALSE,
                                                        'image_width'                => '',
                                                        'image_height'                => '',
                                                        'image_type'                => '',
                                                        'image_size_str'        => '',
                                                        'error_msg'                        => array(),
                                                        'mimes'                                => array(),
                                                        'remove_spaces'                => TRUE,
                                                        'xss_clean'                        => FALSE,
                                                        'temp_prefix'                => "temp_file_"
                                                );       
       
       
                foreach ($defaults as $key => $val)
                {
                        if (isset($config[$key]))
                        {
                                $method = 'set_'.$key;
                                if (method_exists($this, $method))
                                {
                                        $this->$method($config[$key]);
                                }
                                else
                                {
                                        $this->$key = $config[$key];
                                }                       
                        }
                        else
                        {
                                $this->$key = $val;
                        }
                }
        }


这一大段代码,充分表明,CI对代码的要求并不高,实现了,能跑不错就行。
但是,真正的大型项目的用户,还是希望框架能给用户信心。

CI中有开发者数组函数用得特好,但是,这里,是与类相关的数组,本来一行代码就够了,却用了一个很长的array()初始化,为什么不直接读出来?
一个 get_class_vars 就能让上面代码少20多行。
 楼主| 发表于 2008-6-20 08:24:59 | 显示全部楼层

CodeIgniter缺陷探讨(四)

六、助手函数
CI实质上并没有提供实用的助手函数。比如,美其名为文件名助手,但实际上根本没有什么函数可用,因为,针对文件目录操作的创建,删除,重命名,移动,列出清单这五大操作,文件是五个,目录也是五个,至少是10个函数,这在CI中,是没有提供的。CI如果是真的面向初学者,那么,应当考虑到这一点的。
但若你要仔细查看一下这些助手函数,就会发现,这些函数实际不是提供给用户用的。是CI本身就用到的。
同时,这些助手函数的代码算法仍不敢恭维。比如,求某年某月共有多少天,这么一个小小的问题,原本一行代码就能算出的,CI中却用了很多行代码,并且用上了历法知识。而现成的PHP函数放着却不会用。
至少,如果是我来管理CI开发,那么我会不留情地在get_nonth_days函数中,删除一切代码,贴上 return date("d",mktime(0,0,0,$month+1,0,$year));
因为,原有的代码,会让CI失去用户!
头像被屏蔽
发表于 2008-7-3 11:20:54 | 显示全部楼层
还有URL中中文字符的问题,也是BUG!
发表于 2008-7-3 13:13:47 | 显示全部楼层
原帖由 ackiae86 于 2008-7-3 11:20 发表
还有URL中中文字符的问题,也是BUG!

我觉得这不能算 BUG 吧?你可以修改正则表达式来达到你的目的。
发表于 2009-7-19 11:55:06 | 显示全部楼层
关注。。。。 的确分析得透彻。

本版积分规则