当前位置: 首页 > news >正文

怎么做有趣的视频网站/网络营销公司如何建立

怎么做有趣的视频网站,网络营销公司如何建立,wordpress安装视频教程,上海房地产信息网官网分类: PHP目录(?)[] 本篇并不是对某一组件的详细源码分析,而只是简单的跟踪了下CI的autoload的基本流程。因此,可以看做是Loader组件的分析前提。 CI框架中,允许你配置autoload数组,这样,在你的应用程序初…

分类: PHP

目录(?)[+]

本篇并不是对某一组件的详细源码分析,而只是简单的跟踪了下CI的autoload的基本流程。因此,可以看做是Loader组件的分析前提。

CI框架中,允许你配置autoload数组,这样,在你的应用程序初始化时,会自动加载相应的类库,例如,在application/config/autoload.php中,autoload的配置如下:

$autoload['libraries'] = array("smarty", "redis");

则CI框架初始化时,会自动加载libraries下面的smarty.php和redis.php,并且在你的应用程序控制器中,可以通过$this->smarty->xxx  和$this->redis->yyy的方式调用你的类库。

CI允许autoload中配置的自动加载的类别有:

1.Packages ---包
2.Libraries  --类库
3.Helper files   ---用户自定义的辅助文件
4.Custom config files    ---用户自定义配置文件
5.Language files    ---语言包
6.Models    ---模型类

我们接下来以Libraries的自动加载为例,在追踪CI的autoload之路。

由于Loader是CI中组件加载的管理器,而Loader是在CI_Controller中被加载的,因此我们从Controller加载Loader组件开始追踪。

1.      CI_Controller

在CI_Controller中追踪到这样一句话:

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. $this->load =& load_class('Loader''core');  
  2. $this->load->initialize();  

于是我们猜想,在Loader的initialize的过程中,对autoload做了相应的处理。

2.      Loader的initialize方法实现

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public function initialize()  
  2. {  
  3.     $this->_ci_classes = array();  
  4.     $this->_ci_loaded_files = array();  
  5.     $this->_ci_models = array();  
  6.     $this->_base_classes =& is_loaded();  
  7.    
  8.     $this->_ci_autoloader();//注意这里,看方法的名字,也可以猜到是对autoload的处理  
  9.     return $this;  
  10. }  

Initialize的前面四个语句,用于对本身的属性、参数等初始化,不是我们需要关心的内容,真正执行autoload的应该是$this->_ci_autoloader(),沿着该线索,我们进入_ci_autoload的内部:

3.      _ci_autoloader的方法:

(1).首先引入autoload的配置数组:

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. if (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/autoload.php'))  
  2. {  
  3.          include(APPPATH.'config/'.ENVIRONMENT.'/autoload.php');  
  4. }  
  5. else  
  6. {  
  7.          include(APPPATH.'config/autoload.php');  
  8. }  

(2).   由于我们这次只追踪libraries的autoload机制,因此我们略过对packages和config等的autoload处理机制,而直接寻找对libraries的处理:

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. if (isset($autoload['libraries']) AND count($autoload['libraries']) > 0)  
  2. {  
  3.          //ignore database eg.  
  4.          foreach ($autoload['libraries'as $item)  
  5.          {  
  6.                    $this->library($item);  
  7.          }  
  8. }  

可以看出,对所有的autoload的libraries,实际上是执行了library方法,再次进入library方法查看。

4.      library方法实现。

上述对该方法的调用中,传递的是autoload中配置的类库名(我们的例子是redis和smarty),library方法的具体实现:

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public function library($library = ''$params = NULL, $object_name = NULL)  
  2. {  
  3.     if (is_array($library))  
  4.     {  
  5.         foreach ($library as $class)  
  6.         {  
  7.             $this->library($class$params);  
  8.         }  
  9.    
  10.         return;  
  11.     }  
  12.    
  13.     if ($library == '' OR isset($this->_base_classes[$library]))  
  14.     {  
  15.         return FALSE;  
  16.     }  
  17.    
  18.     if ( ! is_null($params) && ! is_array($params))  
  19.     {  
  20.         $params = NULL;  
  21.     }  
  22.    
  23.     $this->_ci_load_class($library$params$object_name);  
  24. }  

可以看出,如果$library是数组,则会循环调用library方法。实际上最终会调用$this->_ci_load_class。再次进入_ci_load_class查看.

5.      _ci_load_class的实现

撇开其中的错误检查和安全检查,我们只看关键的代码:

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. return $this->_ci_init_class($class, config_item('subclass_prefix'), $params$object_name);  

该方法,将对类库的初始化抛给了_ci_init_class处理:

[php] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. $CI =& get_instance();//获取Controller的实例  
  2. if ($config !== NULL)  
  3. {  
  4.     $CI->$classvar = new $name($config);  
  5. }  
  6. else  
  7. {  
  8.     $CI->$classvar = new $name;  
  9. }  

到这里,我们总算了解了CI的autoload的基本流程(漫漫长征),作为对Loader组件的初步追踪,我们省略了中的许多实现细节,这些我们将在对Loader组件的分析过程中慢慢添加上。

总结一下autoload的基本流程:

1.    Application/config/autoload.php中配置需要autoload的类库
2.    Controller实例化的时候,会加载Loader组件,并调用该组件的initialize方法,对需要的资源初始化.
3.    经过更多的错误检查和安全性检查的步骤,加载需要的类库、配置等。

最后说一句,并不是所有的类库都需要通过CI的autoload加载,因为该类库在框架初始化的时候就被加载,而不管你是不是需要使用该类库,这样实际上会有一定的性能损失。如果你的类库并不是所有应用都需要的,那么,更好的方法是需要时再加载。关于这一点,我们之后在分析Loader组件的设计和实现时会进一步详细说明。

本篇的参考文献:

1.  http://itopic.org/codeigniter-config-autoload.html

2.  http://codeigniter.org.cn/user_guide/general/autoloader.html

http://www.lbrq.cn/news/1046053.html

相关文章:

  • 网站建设公司价位/杭州网站seo公司
  • 呼市做开发网站的公司/成都关键词seo推广平台
  • wordpress的根目录/广州seo优化费用
  • 想自己做个网站/天津疫情最新消息
  • 企业网站建设方案 word/高级搜索
  • 做土特产的网站/上海今天最新发布会
  • 东莞做网站公司/免费企业建站
  • 网站模板d一品资源网/百度图片收录提交入口
  • 深圳招聘网站开发/曲靖百度推广
  • 服装公司网站设计/在百度怎么创建自己的网站
  • 帮客户做网站内容/各种资源都有的搜索引擎
  • 免费微商城网站建设/企业网站seo服务
  • 网站建设 增值税税率/seo服务方案
  • 成都 广告公司网站建设/自己建网站怎样建
  • 互联网家装公司/优化网站最好的刷排名软件
  • 旅游网站设计模板图片/热点营销案例
  • 青岛市工程建设信息网站/测试自己适不适合做销售
  • 英文网站建设需求/网推是干什么的
  • 做淘宝客新增网站推广/站长统计app软件下载
  • 河北廊坊网站建设/成都seo培训
  • 镇赉县做网站的/软文代写价格
  • 青岛西海岸新区建设网站/培训心得简短200字
  • 手机网站模板更换方法/推广软件赚钱
  • 阜阳交通建设工程质监局网站/seo内容优化
  • wordpress网站渗透测试/镇江网站建设企业
  • 深圳网站建设深圳网络公司/百度指数可以用来干什么
  • 网站规划设计是什么/seo优化排名经验
  • 厚街仿做网站/西安seo按天收费
  • 西宁的网站建设公司/二十条优化
  • 台州网站制作开发/推广app佣金平台正规
  • 第4章 程序段的反复执行4 多重循环练习(题及答案)
  • C语言:指针(2)
  • 【npm、yarn、pnpm】特点对比,按需选择
  • 十、Linux Shell脚本:流程控制语句
  • 【面试场景题】异地多活改造方案
  • 整数规划-分支定界