[文件命名问题]为什么要求文件名是类名的手写形式?
本帖最后由 Altair 于 2014-8-8 15:16 编辑如题!
习惯的定义与类同名的类文件,当CI却建议使用类名的小写形式作为类文件名,真的有必要?!
但以model的加载为例:
载入模型
测试环境: mac xampp本地服务器.
假定:model名称为: Sample_model
Sample_model类有一个方法为 sample_method.
可选类文件名为: sample_model.phpSample_model.php
对类加载的影响:没有影响.
即无论你使用以上哪种方式来命名类文件,以下任一代码都可以使对应的Sample_model类正确加载.
$this->load->model('sample_model');
$this->load->model('Sample_model');
$this->load->model('Sample_Model');
结论:加载model类时,大小写不会产生任何影响.
对model调用时的影响:必须与加载时传递的model名称的大小写一致.
即以上三种加载方式对应的使用model方法依次是:
$this->sample_model->sample_method();
$this->Sample_mode->sample_method();
$this->Sample_Model>sample_method();
总结:类文件的命名对类的加载没有影响,但使用这个类时,必须保证名称与加载时的名称大小写一致.
猜测:文档建议使用类的小写形式作为类的文件名,这样在使用时就好像控制器本身就有这样一个属性一样,给人一种高大上的感觉.
但是,这样真的好吗?如果控制器本身确实有这样一个属性时,岂不是会发生某种程度的混乱!
我的看法: 支持下面这种方式:
$this->load->model('Sample_model');
$this->Sample_model>sample_method();
这样,你不仅可以按照以往的习惯将类文件名命名为与类同名的形式;更重要的时,这样的代码使你明白Sample_model属性不是此控制器自带的方法,而是从外部引入的.从代码可读性来说,我觉的后一种更加清晰,更具可读性.
个人看法, 欢迎吐槽!
windows对文件名大小写不敏感,但在lunix下却是大小写敏感的。
我猜也是为了统一吧。
system/core下面的Loader.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下的这个问题,所以最好还是使用手册中推荐的方法来命名
smallerpig 发表于 2014-8-8 16:35
windows对文件名大小写不敏感,但在lunix下却是大小写敏感的。
我猜也是为了统一吧。
system/core下面的Loa ...
你可以看下我的这篇帖子,没有那么复杂,很好实现的
让你的类名和类文件支持驼峰命名法
http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=19238&fromuid=25394
(出处: CodeIgniter 中国开发者社区
页:
[1]