yaf的基础教程(2)–项目的实例化newYaf_Application()
作者:ccccccc_fly_887 | 来源:互联网 | 2016-03-17 00:42
在我们看范例的时候我们知道,运行整个程序的入口程序是这样的yaf的基础教程(2)–项目的实例化newYaf_Application()
在我们看范例的时候我们知道,运行整个程序的入口程序是这样的:
$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()的时候即可以配置为配置文件也可以使数组。今天就写这么多,剩下的明天再来
推荐阅读
-
本文介绍了多个适用于用户界面设计的Canvas框架,帮助开发者选择最适合的工具。 ...
[详细]
蜡笔小新 2024-12-23 20:28:53
-
本文介绍了一段使用jQuery实现的用户注册页面表单验证代码,适用于前端开发人员学习和参考。该示例结合了HTML、CSS和JavaScript,确保用户输入的数据格式正确。 ...
[详细]
蜡笔小新 2024-12-24 14:37:46
-
-
本文将详细介绍如何在Faceu激萌应用中设置和使用妆容切换特效,帮助用户轻松实现创意拍摄。无论是新手还是有经验的用户,都能从中受益。 ...
[详细]
蜡笔小新 2024-12-28 13:03:29
-
本文介绍了拍摄高质量Vlog所需的设备,包括索尼A7 III相机、蔡司镜头、罗德麦克风、单反稳定器、苹果手机及其配件、灯光设备等。此外,还探讨了后期制作所需的软件工具,如剪辑、特效和调色软件。无论你是业余爱好者还是专业创作者,选择合适的设备至关重要。 ...
[详细]
蜡笔小新 2024-12-28 12:46:53
-
QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ...
[详细]
蜡笔小新 2024-12-28 12:33:18
-
本文详细介绍了暂估入库的会计分录处理方法,包括账务处理的具体步骤和注意事项。 ...
[详细]
蜡笔小新 2024-12-28 12:26:30
-
本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ...
[详细]
蜡笔小新 2024-12-28 12:22:34
-
本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ...
[详细]
蜡笔小新 2024-12-28 12:07:46
-
本文详细介绍了极大似然估计(Maximum Likelihood Estimation, MLE)的推导过程,并通过3D可视化展示其在概率密度函数中的应用。我们将探讨如何利用MLE来估计参数,以及它在实际问题中的重要性。 ...
[详细]
蜡笔小新 2024-12-28 12:03:58
-
2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ...
[详细]
蜡笔小新 2024-12-28 11:58:48
-
本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ...
[详细]
蜡笔小新 2024-12-28 11:54:54
-
本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ...
[详细]
蜡笔小新 2024-12-28 11:52:00
-
探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ...
[详细]
蜡笔小新 2024-12-28 11:46:54
-
尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ...
[详细]
蜡笔小新 2024-12-28 11:12:44
-
本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ...
[详细]
蜡笔小新 2024-12-27 08:43:40
-
ccccccc_fly_887
这个家伙很懒,什么也没留下!