ZF是利用apache的rewrite技术实现单一入口,打开public/index.php文件开始进行源代码的解读。
一开始定义的是一些系统常量,比如程序根目录等,第一个文件
require_once 'Zend/Application.php';
这是程序启动所要加载的第一个文件,它包含了ZF的整个核心构建,首先是创建类并初始化
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' );
在构造类时,首先调用构造函数,在构造函数里面有有一个$this->_autoloader = Zend_Loader_Autoloader::getInstance();这是实现ZF的类文件的自动包含,即:当某个类不存在是,ZF会自动调用某个机制进行处理,当使用到时再进行跟进。由于构造函数的$options选项是字符串,故程序会加载 configs/application. ini 文件, 由此我们也会知道ZF是在初始化是载入配置文件的,下面看一下ZF是如何载入配置文件的
protected function _loadConfig($file) { $environment = $this->getEnvironment(); $suffix = strtolower(pathinfo($file, PATHINFO_EXTENSION)); switch ($suffix) { case 'ini': $config = new Zend_Config_Ini($file, $environment); break; case 'xml': $config = new Zend_Config_Xml($file, $environment); break; case 'php': case 'inc': $config = include $file; if (!is_array($config)) { throw new Zend_Application_Exception('Invalid configuration file provided; PHP file does not return array value'); } return $config; break; default: throw new Zend_Application_Exception('Invalid configuration file provided; unknown config type'); } return $config->toArray(); }
ZF是通过私有函数 protected function _loadConfig($file) 载入配置文件的,有代码可看出它不止支持ini型文件,跟踪到Zend_Config_Ini可以仔细观察,但是在进入Zend_Config_Ini以前,因为没有包含Zend/Config/Ini.php文件,ZF会子动调用Zend_Loader_Autoloader::getInstance()接口进行加载,进入Zend/Loader/Autoloader.php文件,Zend_Loader_AutoLoader类的构造函数利用SPL(即:spl_autoload_register(array(__CLASS__, 'autoload'));)技术,让autoload函数处理尚未定义的类,即加载相应的文件,ZF除了处理简单的包含用有该类的文件外,还处理了命名空间等,不做介绍。可以发现autoload()是调用Zend/Loader.php文件的loadClass()函数加载相应的文件并进行相应的处理,到此,ZF已经自动加载完Zend/Config/Ini.php文件,即可调用Zend_Config_Ini类,ini解析完成后返回配置文件的一个数组,然后教给 public function setOptions(array $options) 这个函数进行处理,在设置工程中,由于会设置相应的参数,Bootstrap启动文件同样会被设置,并被创建了一个实例,而且将$application这个实例作为参数传个了他,我想在后面肯定会拿次做文章
到此整个项目的环境设置完毕,下面就是运行了
接下来运行bootstrap引导程序$application->bootstrap() //这应该是运行引导文件 ->run(); //这是启动项目