您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcmsv9源码base.php解析
半梦2025-05-25phpcms教程已有人查阅
导读base.php在上文已经说过,是在PC中重要的一个文件,基本常量、核心类文件的加载都由它来完成。9行,定义了一个常量 IN_PHPCMS
base.php在上文已经说过,是在PC中重要的一个文件,基本常量、核心类文件的加载都由它来完成。
9行,定义了一个常量 IN_PHPCMS,在系统的入口定义一个常量,在其他文件就判断是否这个常量被定义,防止某人直接越过框架直接进入某些页面,
这个常量在后面的模块、模型操作文件中都会存在,以后朋友们在开发的时候也要严格按照这个要求和规范。
12-26行,主要定义了很多常量,这里主要是对$_SERVER这个服务器变量的运用,打印这个数组便知晓了。
HTTP_REFERER这个常量在后面会经常用到,它只要用于返回上级,在PC中经常很showmessage一起用。如showmessage('参数错误', HTTP_REFERER);
SYS_START_TIME在这里是为后面的程序执行效率做准备的,在系统函数/phpcms/libs/functions/global.func.php里第260行的execute_time()函数结合来用,可得出程序的执行时间。
27-60行,基本上是没法聊下去了,因为这里面基本上都和pc_base这个PC的核心类有关,我们暂时先把这一块放在这,聊完了pc_base这个类,这几段代码也就能明白了,
pc_base这个类过长,也没法很好的截图,那么我就直接以代码行数来定位坐标,方便大家阅读。
pc_base是一个类文件,关于这个类大家需要先清楚静态方法及静态变量,不明白的朋友要先恶补一下,否则将不好理解。
pc_base这个类里面的方法很多都异曲同工,我们拿几个典型的方法来开刀,他是load_sys_class 。(以下代码解释以Cnblogs的代码编辑器为主,所以同学们要打开原代码以对准行数)
108行,如果$path为空,那么路径就为libs/class/这个目录,同时这也是系统的类库,开发过程可以把第三方类库放这里。
110行,加密了路径和名称,目前还不知道作用,我们先往下看。
111-117行,判断设置了$classes[$key],目前程序走到这里,这个判断是false,但具体作用我们还不知道,先放着,继续往下看。
113-114行,如果这个文件存在,那么加载它。
115-118行,这个主要是判断是否有自己的方法,以防升级出错。
117-121行, 这里$initialize为真就初始化这个类,同时赋值给$classes[$key],看到这里你就该明白111-117行为什么要做这个判断了吗?如果这个变量有值得话表示已经加载过了就不在重复加载以确保执行效率。这里在多说一点,变量$initialize =0或是1的区别在于加载类文件之后是继承还是使用里面的方法。
这个方法到这里算结束了,主要是加载你指定的类文件,如果文件已经加载过了就不重复加载,然后执行是否初始化这个操作。
load_sys_class($classname, $path = '', $initialize = 1) /phpcms/libs/classes/$classname.class.php
load_app_class($classname, $m = '', $initialize = 1) /phpcms/modules/ROUTE_M/classes/$classname.class.php
load_model($classname) /phpcms/model/$classname.class.php
load_sys_func($func) /phpcms/libs/functions/$func.func.php
load_app_func($func, $m = '') 如果 $m为空/phpcms/modules/ROUTE_M/functions/$func.func.php 否则 /phpcms/modules/$m/functions/$func.func.php
9行,定义了一个常量 IN_PHPCMS,在系统的入口定义一个常量,在其他文件就判断是否这个常量被定义,防止某人直接越过框架直接进入某些页面,
这个常量在后面的模块、模型操作文件中都会存在,以后朋友们在开发的时候也要严格按照这个要求和规范。
12-26行,主要定义了很多常量,这里主要是对$_SERVER这个服务器变量的运用,打印这个数组便知晓了。
HTTP_REFERER这个常量在后面会经常用到,它只要用于返回上级,在PC中经常很showmessage一起用。如showmessage('参数错误', HTTP_REFERER);
SYS_START_TIME在这里是为后面的程序执行效率做准备的,在系统函数/phpcms/libs/functions/global.func.php里第260行的execute_time()函数结合来用,可得出程序的执行时间。
27-60行,基本上是没法聊下去了,因为这里面基本上都和pc_base这个PC的核心类有关,我们暂时先把这一块放在这,聊完了pc_base这个类,这几段代码也就能明白了,
pc_base这个类过长,也没法很好的截图,那么我就直接以代码行数来定位坐标,方便大家阅读。
pc_base是一个类文件,关于这个类大家需要先清楚静态方法及静态变量,不明白的朋友要先恶补一下,否则将不好理解。
pc_base这个类里面的方法很多都异曲同工,我们拿几个典型的方法来开刀,他是load_sys_class 。(以下代码解释以Cnblogs的代码编辑器为主,所以同学们要打开原代码以对准行数)
/**
* 加载系统类方法
* @param string $classname 类名
* @param string $path 扩展地址
* @param intger $initialize 是否初始化
*/
public static function load_sys_class($classname, $path = '', $initialize = 1) {
return self::_load_class($classname, $path, $initialize);
}
76-78行,从注释上看的出来,load_sys_class方法的三个参数分别是类名称,路径和是否实例化。同时把3个变量传入了_load_class方法,那么_load_class便是我们需要重点研究的方法了。
/**
* 加载类文件函数
* @param string $classname 类名
* @param string $path 扩展地址
* @param intger $initialize 是否初始化
*/
private static function _load_class($classname, $path = '', $initialize = 1) {
static $classes = array();
if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'classes';
$key = md5($path.$classname);
if (isset($classes[$key])) {
if (!empty($classes[$key])) {
return $classes[$key];
} else {
return true;
}
}
if (file_exists(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
include PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php';
$name = $classname;
if ($my_path = self::my_path(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
include $my_path;
$name = 'MY_'.$classname;
}
if ($initialize) {
$classes[$key] = new $name;
} else {
$classes[$key] = true;
}
return $classes[$key];
} else {
return false;
}
}
107行,static变量,我做项目来使用static主要是俩个方面1、算数累加 2、判断是否重复。108行,如果$path为空,那么路径就为libs/class/这个目录,同时这也是系统的类库,开发过程可以把第三方类库放这里。
110行,加密了路径和名称,目前还不知道作用,我们先往下看。
111-117行,判断设置了$classes[$key],目前程序走到这里,这个判断是false,但具体作用我们还不知道,先放着,继续往下看。
113-114行,如果这个文件存在,那么加载它。
115-118行,这个主要是判断是否有自己的方法,以防升级出错。
117-121行, 这里$initialize为真就初始化这个类,同时赋值给$classes[$key],看到这里你就该明白111-117行为什么要做这个判断了吗?如果这个变量有值得话表示已经加载过了就不在重复加载以确保执行效率。这里在多说一点,变量$initialize =0或是1的区别在于加载类文件之后是继承还是使用里面的方法。
这个方法到这里算结束了,主要是加载你指定的类文件,如果文件已经加载过了就不重复加载,然后执行是否初始化这个操作。
load_sys_class($classname, $path = '', $initialize = 1) /phpcms/libs/classes/$classname.class.php
load_app_class($classname, $m = '', $initialize = 1) /phpcms/modules/ROUTE_M/classes/$classname.class.php
load_model($classname) /phpcms/model/$classname.class.php
load_sys_func($func) /phpcms/libs/functions/$func.func.php
load_app_func($func, $m = '') 如果 $m为空/phpcms/modules/ROUTE_M/functions/$func.func.php 否则 /phpcms/modules/$m/functions/$func.func.php
本文标签:
很赞哦! ()
上一篇:phpcmsV9首页模板文件解析
图文教程
phpcms怎么修改后台登录地址
默认的phpcmsv9后台管理路径很多人都知道,对于说网站来说不安全,不过,我们可以通过一些简单的技巧,来修改后台管理登陆路径,修改之后
phpcms网页替换验证码和搜索功能修复方法
在使用phpcms替换网页的时候,除了正常的替换栏目、内容页等,其他的什么验证码啦,提交表单了,搜索功能了,这些在替换的时候可能会对一些默认文件有一些小小 的改变
discuz不能登陆phpcms的几种解决方法
discuz不能登陆phpcms怎么办?discuz,ucenter,uchome修改密码 phpcms不能登陆的问题修正1、在UC后台更改密码后PC无法登陆的
PHPCMSv9安全设置防挂码教程
一、目录权限设置很重要:可以有效防范黑客上传木马文件.如果通过 chmod 644 * -R 的话,php文件就没有权限访问了。如果通过chmod 755 * -R 的话,php文件的权限就高了。
相关源码
-
(自适应)游泳馆泳池水处理器设备pbootcms网站模板免费下载专注服务于泳池水处理设备制造商、泳池系统工程商等企业用户。模板预设设备分类体系、技术参数展示模块和解决方案呈现页面,满足行业特有展示需求。查看源码 -
自适应建材瓷砖卫浴大理石类pbootcms网站模板源码下载为建材瓷砖、卫浴瓷砖企业打造的高端响应式门户模板,基于PbootCMS内核深度开发。采用前沿HTML5自适应架构,无缝兼容手机端触控交互与PC端展示场景。查看源码 -
自适应html5二极管LED灯具灯饰类企业网网站模板该PbootCMS内核开发的响应式模板专为LED照明、灯具制造类企业设计,通过HTML5技术实现手机与PC端自适应显示,确保跨设备访问体验一致。企业可快速替换图文内容适配其他工业领域查看源码 -
(自适应)html5宽屏电线电缆材料加工制造类企业网站源码下载本模板基于PbootCMS系统开发,特别适合电线电缆、电缆材料及相关加工制造类企业使用。采用HTML5宽屏设计,能够展示各类电缆产品的技术参数和规格详情,帮助客户全面了解产品特性。查看源码 -
(自适应)宽屏大气红色机械设备pbootcms模板源码下载为机械设备制造企业设计的响应式网站模板,采用PbootCMS内核开发。宽屏布局突出设备展示效果,红色工业风格贴合机械行业属性,支持PC端与手机端自动适配查看源码 -
(PC+WAP)绿色资源回收新能源环保设备pbootcms源码下载基于PbootCMS系统深度开发的环保行业模板,特别适配资源回收设备、新能源技术、环境治理装备等企业的线上展示需求。集成产品库、解决方案、环保案例等专业模块,助力企业高效传递绿色价值。查看源码
| 分享笔记 (共有 篇笔记) |
