本文实例分析了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程序设计有所帮助。