yaf的基础教程(2)--项目的实例化new Yaf_Application()

widuu 2014-12-18 yaf框架 1,547 1 喜欢 (0)

在我们看范例的时候我们知道,运行整个程序的入口程序是这样的:

$app  = new Yaf_Application(APPLICATION_PATH . "/conf/application.ini");
$app  ->bootstrap() //call bootstrap methods defined in Bootstrap.php
      ->run();

先从new Yaf_Application()开始说起,当我们new这个类的时候发生了什么呢??源代码给大家分析一下。在yaf_application.c的351行是实例化这个方法的源程序,我们看到需要1个输入参数和1个可选参数。

zval            *config;
zval            *section = NULL;

然后,我们看以下代码

if (!section || Z_TYPE_P(section) != IS_STRING || !Z_STRLEN_P(section)) {
    //如果可选参数section为空或者不是字符串或字符串地址为空的时候
    MAKE_STD_ZVAL(section); //定义变量
    /*
        #define YAF_G(v) TSRMG(yaf_globals_id, zend_yaf_globals *, v)
        #else
        #define YAF_G(v) (yaf_globals.v)
        其中YAF_G是自己定义的一个宏变量,在yaf.h中定义,它读取的是在yaf.c中PHP_INI_BEGIN中定义的yaf.environ的变量值,默认情况下是product,然后将这个字符串赋值给section
    */
    ZVAL_STRING(section, YAF_G(environ), 0);    
    //实例化Config,用于读取配置信息 
    zconfig = yaf_config_instance(NULL, config, section TSRMLS_CC);
    efree(section);//释放内存
} else {
    //如果指定了section 实例化Config,用于读取配置信息 
    zconfig = yaf_config_instance(NULL, config, section TSRMLS_CC);
}

所以从上边我们看出了,我们php.ini中定义的yaf.environ的值是什么作用,这个是我们根据自己的喜欢设置的,如果不设置就默认为product,当我们在编写配置文件的时候就应该这样

[product]
application.directory=APP_PATH "/application/" 

如果修改了yaf.environ的值,假如修改成了widuu,而你的配置文件中并没有修改product,那么会报错,no section "widuu"

所以,当我们写配置文件的时候一定要把php.ini中定义的yaf.environ的值作为section来写。new Yaf_Application()的配置文件可以使字符串也可以是数组

zconfig = yaf_config_instance(NULL, config, section TSRMLS_CC);

其中yaf_config.c的330行,我们就可以看到两种类型判断

if (Z_TYPE_P(arg1) == IS_STRING)    //判断是字符串
if (Z_TYPE_P(arg1) == IS_ARRAY)     //判断数组

然后针对不同的类型,在做解析

//ini配置文件解析,就会通过yaf_config_ini.c中的yaf_config_ini_instance来解析
yaf_config_ini_instance(this_ptr, arg1, arg2 TSRMLS_CC);

//数组解析,就会通过yaf_config_simple.c中的yaf_config_simple_instance来解析
yaf_config_simple_instance(this_ptr, arg1, readonly TSRMLS_CC);

所以,当我们配置new Yaf_Application()的时候即可以配置为配置文件也可以使数组。今天就写这么多,剩下的明天再来

转载请注明来自微度网络,本文标题:《yaf的基础教程(2)--项目的实例化new Yaf_Application()》

喜欢 0 发布评论
Top