用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2903|回复: 2
收起左侧

[Others] [文件命名问题]为什么要求文件名是类名的手写形式?

[复制链接]
发表于 2014-8-8 15:15:00 | 显示全部楼层 |阅读模式
本帖最后由 Altair 于 2014-8-8 15:16 编辑

如题!
习惯的定义与类同名的类文件,当CI却建议使用类名的小写形式作为类文件名,真的有必要?!
但以model的加载为例:
载入模型
测试环境: mac xampp本地服务器.

假定:model名称为: Sample_model
Sample_model类有一个方法为 sample_method.
可选类文件名为: sample_model.php  Sample_model.php

对类加载的影响:没有影响.
即无论你使用以上哪种方式来命名类文件,以下任一代码都可以使对应的Sample_model类正确加载.
PHP复制代码
 
$this->load->model('sample_model');
$this->load->model('Sample_model');
$this->load->model('Sample_Model');
 
复制代码

结论:  加载model类时,大小写不会产生任何影响.

对model调用时的影响:  必须与加载时传递的model名称的大小写一致.
即以上三种加载方式对应的使用model方法依次是:
PHP复制代码
 
$this->sample_model->sample_method();
$this->Sample_mode->sample_method();
$this->Sample_Model>sample_method();
 
复制代码


总结:类文件的命名对类的加载没有影响,但使用这个类时,必须保证名称与加载时的名称大小写一致.

猜测:文档建议使用类的小写形式作为类的文件名,这样在使用时就好像控制器本身就有这样一个属性一样,给人一种高大上的感觉.

但是,这样真的好吗?如果控制器本身确实有这样一个属性时,岂不是会发生某种程度的混乱!

我的看法: 支持下面这种方式:
PHP复制代码
$this->load->model('Sample_model');
$this->Sample_model>sample_method();
 
复制代码

这样,你不仅可以按照以往的习惯将类文件名命名为与类同名的形式;更重要的时,这样的代码使你明白Sample_model属性不是此控制器自带的方法,而是从外部引入的.从代码可读性来说,我觉的后一种更加清晰,更具可读性.
个人看法, 欢迎吐槽!
发表于 2014-8-8 16:35:21 | 显示全部楼层
windows对文件名大小写不敏感,但在lunix下却是大小写敏感的。
我猜也是为了统一吧。
system/core下面的Loader.php中的代码片段:
PHP复制代码
 
foreach ($this->_ci_model_paths as $mod_path)
{
        if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
        {
                continue;
        }
 
        if ($db_conn !== FALSE AND ! class_exists('CI_DB'))
        {
                if ($db_conn === TRUE)
                {
                        $db_conn = '';
                }
 
                $CI->load->database($db_conn, FALSE, TRUE);
        }
 
        if ( ! class_exists('CI_Model'))
        {
                load_class('Model', 'core');
        }
 
        require_once($mod_path.'models/'.$path.$model.'.php');
 
        $model = ucfirst($model);
 
        $CI->$name = new $model();
 
        $this->_ci_models[] = $name;
        return;
}
 
复制代码


可以看出其加载类的方法是通过查找对应的文件名来实现的。为了统一在windows下和lunix下的这个问题,所以最好还是使用手册中推荐的方法来命名

 楼主| 发表于 2014-8-14 14:37:41 | 显示全部楼层
smallerpig 发表于 2014-8-8 16:35
windows对文件名大小写不敏感,但在lunix下却是大小写敏感的。
我猜也是为了统一吧。
system/core下面的Loa ...

你可以看下我的这篇帖子,没有那么复杂,很好实现的


让你的类名和类文件支持驼峰命名法
http://codeigniter.org.cn/forums ... 8&fromuid=25394
(出处: CodeIgniter 中国开发者社区


本版积分规则