CI构建一个“超级对象”:它把你的整个程序当作一个大的对象。
当你开始运行CI程序的时候,将发生一连串复杂的事件。如果你设定你的CI允许记录日志,你将会见到类似下面这样的内容:
在启动时—每当通过Internet接收到一个页面请求—CI都执行相同的程序。你可以通过CI的文件来跟踪日志:
- index.php文件收到一个页面请求。URL指出哪一个控制器被调用,如果没有,CI有一个默认控制器(第2行)。Index.php开始一些基本检查然后调用codeigniter.php文件(\codeigniter\ codeigniter.php)。
- codeigniter.php文件实例化Config、Router、Input和URL(等等)类。(第1行和3-9行)这些被调用的叫做“基础”类:你很少直接与它们交互,但是CI做的每件事都与它们有关。
- codeigniter.php 检测它正在使用的PHP版本,根据版本决定调用Base4还是Base5(/codeigniter/base4(或5).php)。然后创建一个“singleton”实例:即一个类只能有一个实例。并且都有一个公共的 &get_instance() 方法。注意符号 &:这是引用实例的符号。因此如果你调用 &get_instance() 方法,它产生类的单一实例。换句话说,整个应用中这个实例是唯一的,其中包含许许多多框架中其它类的实例。
- 在安全检查之后,codeigniter.php实例化被请求的控制器、或一个默认控制器(第10行)。新的类叫做 $CI。然后调用URL中指定的函数(或默认函数),类被实例化之后,相当于被唤醒了,实实在在的存在于内存中。然后,CI会实例化你需要的任何其他的类,并“include”你需要的功能脚本。因此,在上面的日志中,model类被实例化。(第16行)“boilerplate”脚本,也被装载(第13行),这是我编写的包含标准代码的一个文件。它是一个.php文件,保存在scripts目录中,但是它不是一个类:仅仅是一组函数。如果你正在写“纯粹的”PHP代码,你可能会使用“include”或者“require”把这个文件放进命名空间,CI会使用它自己的“装载”函数把它放入“超级对象”中。