您现在的位置是:首页 > 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的代码编辑器为主,所以同学们要打开原代码以对准行数)
/**
* 加载系统类方法
* @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

本文标签:

很赞哦! ()

相关源码

  • (自适应响应式)黑色LED显示屏户外广告屏网站源码下载这是一款基于PbootCMS内核开发的响应式网站模板,专门为LED显示屏及户外广告行业打造。模板适配各类显示设备,帮助企业快速搭建专业官网,展示产品与服务优势,有效提升品牌形象。查看源码
  • (PC+WAP)绿色日志美文文学说说博客网站pbootcms模板除日志博客类网站外,通过替换图文内容可快速适配:心情日记分享平台、文学创作社区、朋友圈内容聚合站、美文鉴赏网站、读书笔记平台等应用场景。查看源码
  • 自适应建材瓷砖卫浴大理石类pbootcms网站模板源码下载为建材瓷砖、卫浴瓷砖企业打造的高端响应式门户模板,基于PbootCMS内核深度开发。采用前沿HTML5自适应架构,无缝兼容手机端触控交互与PC端展示场景。查看源码
  • (自适应响应式)门窗定制门业带视频功能pbootcms模板下载本模板采用PbootCMS内核开发,为门窗制造、定制安装企业打造,通过可视化后台管理系统快速构建品牌官网。自适应设计确保在手机、平板、电脑等设备上均能获得优质浏览体验查看源码
  • (自适应)APP应用软件落地页单页推广页网站模板下载基于PbootCMS内核开发的响应式单页模板,为企业产品展示、服务推广等应用场景设计。通过简洁直观的视觉布局与高效的技术架构,帮助用户快速构建专业级落地页面,实现移动端与PC端数据实时同步展示。查看源码
  • (自适应)文案文档作文写作word资源网站模板下载本模板基于PbootCMS系统深度开发,针对电影解说、文案分享类网站的特殊需求设计。采用响应式布局技术,确保在手机端和桌面端都能呈现专业的内容展示效果,帮助运营者高效管理影视解说资源。查看源码
分享笔记 (共有 篇笔记)
验证码:

本栏推荐