单例模式(单一实例模式)?phpprivatestatic$obj=NULL;classdb{privatefunction__construct(){}privatefunction__clone(){}self::$obj=newself();if(!is_object(self::$obj)){}returnself::$obj;publicstaticfunctioninstance(){}}?单例模式2011年6月7日9:18分区Discuz!X2的第1页主要目录api目录外部接口目录archiver目录无样式论坛config目录配置文件目录data目录缓存目录install目录安装目录source目录源代码目录static目录图片,js目录template目录模板源文件目录uc_client目录UCenter接口目录uc_server目录UCenter目录根目录文件admin.php文件后台管理入口api.php文件外部接口connect.php文件QQ互联平台接口cp.php文件应用管理面板forum.php文件论坛入口文件group.php文件群组入口文件home.php文件家园入口文件index.php文件首页文件member.php文件用户基本操作misc.php文件杂项文件Plugin.php文件插件的入口文件portal.php文件门户入口文件search.php文件站内搜索文件userapp.php文件用户应用管理文件重要文件source/class/class_core.php核心类文件(单例加载)source/function/function_core.php核心函数文件(加载核心类时加载)source/function/function_cache.php缓存生成文件(更新缓存时引入)source/class/class_template.php模板引擎类(template()函数加载)source/funcion/function_admincp.php后台管理函数(根目录admin.php加载)source/class/class_memcache.phpMemcached类封装config/config_global.php核心配置文件config/config_ucenter.phpUCenter配置文件forum.php广场入口home.php家园入口目录结构2011年6月7日9:52分区Discuz!X2的第2页方法清单注:以'_'开头的方法,为私有方法instance方法单例模式加载核心类方法构造函数初始化核心类时调用的方法(调用一个方法列表)init方法二次初始化调用的方法(调用另一个方法列表)_init_env方法初始化运行环境_init_config方法加载配置文件方法_init_input方法过滤输入参数方法_init_output方法初始化输出设置_init_db方法初始化数据库链接_init_memory方法初始化通用内存接口类_init_user方法初始化用户信息_init_session方法初始化Discuz!X内置Session类_init_setting方法加载核心类的cachelist数组中的缓存,加载网站的配置_init_mobile方法初始化wap版Discuz_init_cron方法初始化计划任务类_init_misc方法初始化其他内容(如:时区设定)_init_style方法在模板加载时,初始化网站样式使用方法单例模式引入$discuz=&discuz_core::instance();例如在一个函数使用核心类实例$discuz=&discuz_core::instance();//取得实例echo'pre';print_r($discuz-var);//输出全局变量functionshow(){}成员清单$db数据库类实例$mem内存通用接口类实例$sessionSession类实例$config配置文件数组$var全局变量($_G)$cachelist初始化setting时加载的缓存列表$init_xxx为各个核心功能的开关$superglobal允许在$GLOBALS存在的一维索引名称class_core.php2011年6月7日9:47分区Discuz!X2的第3页核心类中调用了_init_db方法,进行了db的初始化Discuz!X对数据库进行的二次封装数据库查询采用了类的静态调用方式调用方法:DB::方法名()操作数据库方法作用参数DB::table获取数据表真实名称$table=用户表名DB::delete删除表数据$table=操作表$condition=限制条件$limit=删除条数$unbuffered=是否缓存查询数据DB::insert向某个表插入数据$table=操作表$data=array('字段名1'='值1','字段名2'='值2');$return_insert_id=是否返回插入id$replace=是否使用replaceinto$selient=是否报错(默认提示)DB::update更新某个表$table=操作表$data=数据$condition=限制条件array('字段'='值')$unbuffered=是否缓存查询数据$low_priority=是否锁表更新DB::implode_field_value获取字段拼接串$array=array('字段名'='字段值')$glue=连接条件的字符串DB::Insert_id获取最后插入idDB::fetch获取查询集的关联数组$resourceid=QUERY的资源集$type=数组的类型1.MYSQL_BOTH数字索引与关联索引2.MYSQL_ASSOC关联索引3.MYSQL_NUM数字索引DB::fetch_first获取一条查询数组$sql=SQL语句注:只出现一条结果数组DB::result获取某一个查询集的关联数组的索引$resourceid=QUERY资源集$row=取得的字段的顺序DB::result_first获取一个查询集的关联数组的索引$sql=SQL语句注:只出现一条结果例子:查询pre_common_member表的uid为3的用户的信息数组代码:$query=DB::query(SELECT*FROM.DB::table('common_member').WHEREuid=3LIMIT1);while($result=DB::fetch($query)){}数据库操作2011年6月14日8:27分区Discuz!X2的第4页DB::query数据库查询方法$sql=SQL语句$type=类型DB::num_rows取得结果集中行的数目$resourceid=QUERY资源集DB::affected_rows获取增,删,改操作的影响行数DB::free_result释放内存$query=需要释放的结果集DB::error获取错误信息DB::errno获取错误错误号DB::_execute执行某个类的实例$cmd=使用的方法$arg1=参数1$arg2=参数2DB::object获取某个类的实例$dbclass=二次调用的类名DB::checkquery检查query查询安全性$sql=被检查的SQL语句DB::_do_query_safe根据配置信息,判断查询安全性$sql=被检查的SQL语句分区Discuz!X2的第5页$_GET用于取url参数$_POST用户取POST表单的数据$_COOKIE用户取用户的cookie信息(带有前缀)$_FILES用户上传文件(可以正常读取)获取值变量取法$_GET['名称']$_G['gp_名称']$_POST['名称']$_G['gp_名称']$_COOKIE中的auth$_G['cookie']['auth']注:去掉前缀,经过转义$_FILES$_FILES网站memory配置($_config['memory']['memcache']['pre'])$_G['config']['memory']['memcache']['pre']$_GET['mod']$_G['mod']$_GET['inajax']$_G['inajax']$_GET['page']$_G['page']$_COOKIE['sid']$_G['sid']用户信息$_G['member']用户id注:判断用户是否登录$_G['uid']用户名$_G['username']用户组id$_G['groupid']管理组id$_G['adminid']网站的管理配置信息$_G['setting']当前用户组信息$_G['group']加载medal的缓存loadcache('medal');$_G['cache']['medal']每页帖子数$_G['tpp']每页主题数$_G['ppp']表单hash值FORMHASH$_G['formhash']时间戳TIMESTAMP获取source/function/cache/cache_medal.php文件取法:includelibfile('cache/medal','function');数据的交换2011年6月14日9:31分区Discuz!X2的第6页/source/function/function_core.phpsystem_error错误报告updatesession更新Sessiondmicrotime获取微秒时间setglobal将数值存入$_G中,如:$_G['cache']['brand']=1,调用方法setglobal('cache/brand',1);getglobal与getglobal对应,获取$_G中的数值getgpc获取$_GET或$_POST或$_COOKIE中的莫个索引值getuserbyuid通过uid获取用户信息getuserprofile获取用户详细信息daddslashes转译功能,可以转译数组(输入数据转译,防止注入)authcode加密cookie用的函数,uc通信中也用到dfsockopen模拟发包器,通过http协议发送头部信息dhtmlspecialchars数据的html实体化,可以防止页面的跨站漏洞dexit封装了output输出的函数dheader发送头部信息的函数dsetcookie根据配置文件,设置cookie到用户的浏览器getcookie获取cookie,封装了$_G['cookie']数组fileext获取文件扩展名formhash表单hash,一定程度的防止站外提交checkrobot判断是否为机器人程序checkmobile获取手机信息dstrpos字符串查找isemail邮箱正则匹配quescrypt获取安全问题的md5截取值random随机获得一个长度的字符串strexists检查字符串是否存在avatar获取用户头像lang加载语言包checktplrefresh检查模板是否更新template加载模板modauthkey根据用户信息生成authkeygetcurrentnavloaducenter加载UCenter通信包loadcache加载缓存cachedata获取缓存数据dgmdate格式化时间戳为日期dmktime用日期生成时间戳save_syscache存储缓存数据进入common_syscache表核心函数库2011年6月7日分区Discuz!X2的第7页save_syscache存储缓存数据进入common_syscache表block_get获取block数据block_display显示blockdimplode打散一个数组libfile加载一个脚本文件dstrlen获取字符串长度cutstr截取字符串dstripslashes去掉转译,可以操作数组aidencodegetforumimgrewriteoutput重写页面url链接mo