本文实例分析了ThinkPHP/Common/common.php文件常用函数功能。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/**
* 获取和设置配置参数 支持批量定义
* @param string|array $name 配置变量
* @param mixed $value 配置值
* @return mixed
*/
function C( $name =null, $value =null) {
static $_config = array ();
// 无参数时获取所有
if ( empty ( $name )) {
if (! empty ( $value ) && $array = cache( 'c_' . $value )) {
//array_change_key_case():将数组中的所有键名改为全小写或大写,默认会改为全小写
$_config = array_merge ( $_config , array_change_key_case ( $array ));
}
return $_config ;
}
// 优先执行设置获取或赋值,如果参数2为空,则为获取配置配置变量的值的情况;如果参数2不为空,则是为配置变量设置值的情况
if ( is_string ( $name )) { //给配置变量设置值或者获取配置变量的值
if (! strpos ( $name , '.' )) { //如果配置变量名中没有".",则执行下面代码
$name = strtolower ( $name ); //将配置变量名转化为小写
if ( is_null ( $value ))
return isset( $_config [ $name ]) ? $_config [ $name ] : null; //获取配置变量值的情况,返回配置变量的值
$_config [ $name ] = $value ; //给配置变量设置值的情况
return ;
}
// 二维数组设置和获取支持
$name = explode ( '.' , $name );
$name [0] = strtolower ( $name [0]);
if ( is_null ( $value ))
return isset( $_config [ $name [0]][ $name [1]]) ? $_config [ $name [0]][ $name [1]] : null; //获取值的情况
$_config [ $name [0]][ $name [1]] = $value ; //赋值的情况
return ;
}
// 批量设置
if ( is_array ( $name )){ //批量设置值
//array_change_key_case():将数组中的所有键名改为全小写或大写,默认会改为全小写,注意:只是将键名改为小写哦
$_config = array_merge ( $_config , array_change_key_case ( $name ));
if (! empty ( $value )) { // 保存配置值
cache( 'c_' . $value , $_config );
}
return ;
}
return null; // 避免非法参数
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/**
* 处理标签扩展,如: 项目开始标签的调用,tag('app_begin');
* @param string $tag 标签名称
* @param mixed $params 传入参数
* @return mixed
*/
function tag( $tag , & $params =NULL) {
// 系统或框架标签扩展
// C('extends', include THINK_PATH.'Conf/tags.php');//这个文件很重要
$extends = C( 'extends.' . $tag ); //$_config['extends'][app_init]
// 应用或项目标签扩展
// C('tags', include CONF_PATH.'tags.php'); //项目中也可以编写自己的tags.php文件
$tags = C( 'tags.' . $tag ); //$_config['tags'][app_init]
if (! empty ( $tags )) { //如果$tags不为空
if ( empty ( $tags [ '_overlay' ]) && ! empty ( $extends )) { // 合并扩展
$tags = array_unique ( array_merge ( $extends , $tags ));
} elseif (isset( $tags [ '_overlay' ])){ // 通过设置 '_overlay'=>1 覆盖系统标签
unset( $tags [ '_overlay' ]);
}
} elseif (! empty ( $extends )) {
$tags = $extends ;
}
if ( $tags ) {
if (APP_DEBUG) {
G( $tag . 'Start' );
trace( '[ ' . $tag . ' ] --START--' , '' , 'INFO' );
}
// 执行扩展
foreach ( $tags as $key => $name ) {
if (! is_int ( $key )) { // 指定行为类的完整路径 用于模式扩展
$name = $key ;
}
//创建行为类对象,如:$class=$name.'Behavior';$behavior = new $class();//创建一个行为类对象
B( $name , $params ); //执行某个行为,参数1-行为名称 参数2-传入的参数
}
if (APP_DEBUG) { // 记录行为的执行日志
trace( '[ ' . $tag . ' ] --END-- [ RunTime:' .G( $tag . 'Start' , $tag . 'End' ,6). 's ]' , '' , 'INFO' );
}
} else { // 未执行任何行为 返回false
return false;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* 执行某个行为
* @param string $name 行为名称
* @param Mixed $params 传人的参数
* @return void
*/
function B( $name , & $params =NULL) {
//行为类在Think.class.php文件中的autoload($class)函数中自动加载
$class = $name . 'Behavior' ; //行为类的名称
G( 'behaviorStart' );
$behavior = new $class (); //创建一个行为类对象
$behavior ->run( $params ); //给当前行为类对象传递参数
if (APP_DEBUG) { // 记录行为的执行日志
trace( 'Run ' . $name . ' Behavior [ RunTime:' .G( 'behaviorStart' , 'behaviorEnd' ,6). 's ]' , '' , 'INFO' );
}
}
|
注意:行为类、模型类、控制器类 都是在Think.class.php文件中的autoload函数中自动加载的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/**
* 系统自动加载ThinkPHP类库
* 并且支持配置自动加载路径
* @param string $class 对象类名
* @return void
*/
//行为类、模型类、控制器类 都是通过autoload函数自动加载的
public static function autoload( $class ) {
// 检查是否存在别名定义
if (alias_import( $class )) return ;
//行为类都是通过此函数自动加载的
if ( substr ( $class ,-8)== 'Behavior' ) { // 加载行为
if (require_cache(CORE_PATH. 'Behavior/' . $class . '.class.php' )
|| require_cache(EXTEND_PATH. 'Behavior/' . $class . '.class.php' )
|| require_cache(LIB_PATH. 'Behavior/' . $class . '.class.php' )
|| (defined( 'MODE_NAME' ) && require_cache(MODE_PATH.ucwords(MODE_NAME). '/Behavior/' . $class . '.class.php' ))) {
return ;
}
} elseif ( substr ( $class ,-5)== 'Model' ){ // 加载模型
if ((defined( 'GROUP_NAME' ) && require_cache(LIB_PATH. 'Model/' .GROUP_NAME. '/' . $class . '.class.php' ))
|| require_cache(LIB_PATH. 'Model/' . $class . '.class.php' )
|| require_cache(EXTEND_PATH. 'Model/' . $class . '.class.php' ) ) {
return ;
}
} elseif ( substr ( $class ,-6)== 'Action' ){ // 加载控制器
if ((defined( 'GROUP_NAME' ) && require_cache(LIB_PATH. 'Action/' .GROUP_NAME. '/' . $class . '.class.php' ))
|| require_cache(LIB_PATH. 'Action/' . $class . '.class.php' )
|| require_cache(EXTEND_PATH. 'Action/' . $class . '.class.php' ) ) {
return ;
}
}
// 根据自动加载路径设置进行尝试搜索
$paths = explode ( ',' ,C( 'APP_AUTOLOAD_PATH' ));
foreach ( $paths as $path ){
if (import( $path . '.' . $class ))
// 如果加载类成功则返回
return ;
}
}
|
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。