PHP中MVC模式下类的动态加载实现
2019-03-04张伟伟
摘要:应用PHP作为Web项目开发语言,类文件之间的相互引用常见又频繁,但在MVC开发模式之下,由于类文件位置的分散,而使得类间引用关系条理不清。为优化代码编写效率与执行效率,运用当前控制器、行为方法路由地址动态装载和改写自动加载类的方法,实现随请求的改变动态加载类文件。
关键词:MVC
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2019)34-0060-02
软件项目开发中,为提高效率,提高程序员的代码产量,框架的应用尤其广泛。PHP因其上手快,业务框架多等特点成为现今B/S模式开发下热门语言,程序设计人员可以根据业务需求灵活选用不同的框架进行快速代码部署[1]。然而,无论哪种框架模式,都需要程序人员对原生代码的熟知与灵活运用,就PHP开发环境下MVC模式的代码设计来说,分离的组织代码路径的获取是令人头疼,也是最容易代码运行中产生错误的地方。为此,创建一个动态路径的加载应用会极大方便编码,解脱程序员在不同路径的烦琐搜寻。
1 问题环境的描述
1.1 MVC模式
MVC(ModeIViewController)即模型一视图一控制器的缩写,是流行至今的一个软件设计典范,多种开发语言中均有运用[2]。它是一种运用业务逻辑、数据以及应用交互界面分离的方法来组织代码,将众多的业务逻辑汇集到一个部件中,在需要改进与个性化定制界面及用户交互的时,无须重新编写业务逻辑,从而提高编码效率。
1.2文件手动加载
PHP项目开发中,模型、视图与控制器为保证相互独立,编码文件所在目录分散,造成文件调用过程中文件包含关系错综复杂,程序员需耗费相当精力实现被包含文件的加载,且包含条理混乱,错误频发。对项目的后期维护与迭代都会产生相当的影响。
为此,项目设计起始就应解决模块间的加载困扰,应用某策略,使得在文件调用中无须关顾太多路径问题。
2 自动加载实现
MVC模式下,模型、视图与控制器分属不同目录文件位置(如图2),用户首先访问人口页面视图,视图请求控制器,控制器响应特定行为,获取相应模型数据,而后将处理结果反馈到视图中呈现给用户。因而,在访问请求中需明确控制器和控制器执行的行为名称。在用户的首次访问时,因请求地址可能只包含域名而未给定控制器与行为名,故而使用默认初始化的CONTROLLER_NAME和ACTION_NAME,当用户请求非首页页面时,由于链接地址中明确给出了控制器和行为名称,在经过路由装载后,生成当前控制器和视图的路径并存放与“URL”和“VIEW_”中,当实例化类对象时,自动调用经重写和注册的自动加载类方法,实现包含文件后台加载。
2.1 常量的定义
在实际项目中,站点代码会因环境不同部署在不同存储位置,故而应首先获取存储目录(ROOT_PATH),再依据站点的目录结构进行设定。具体描述见表1。
2.2 路由装载
MVC模式页面的访问,一般域名地址相同,不同页面区别只在于地址信息中控制器、行为方法和应用平台等信息的不同。当控制器、行为方法或应用平台参数值发生改变时,执行路由解析会针对不同URL,获取不同的控制器和行为方法名,调用不同的模型应用。代码如下:
private static function initRoutes0{
$c=isset($_REQUEST["c"])? $_REQUEST["c"]: $GLOBALS[”config"][¨app¨][default_controller'];//接收控制器名
$a=isset($_REQUEST["a”])?
$_REQUEST["a"]:
$GLOBALS["config"]["app"][ 'default_action];//接收行為方法名
$p=isset($_REQUEST["p"D? $_REQUEST["p"): $GLOBALS[”config"][¨app¨Ⅱ7 default_platform 7];//接收平台名
define(”CONTROLLER_NAME”,$c)//定义常量控制器名
define(”ACTION_NAME”,$a);//定义常量行为方法名
define(”PLATFORM—NAME”,$p);//定义常量平台名
define(”一URL_”,
CONTROLLER_PATH.
PLAT-FORM_NAME.DS);//当前的控制器目录
define(“_VIEW一”,VIEW_PATH. PLATFORM_NAME. DS);//当前视图目录:”
)
2.3 类的自动加载
为实现控制器类中方法能调用不同视图和模型,需要在实例化类对象之前,加载类的定义,即要完成对不同存储位置下类的引用。为优化代码的性能,节省无谓的精力消耗,应用类自动加载方案。将自动加载类_autoLoad0方法运用pl_auto-load_register0重新注册改写,当代码解析为新引用类时,自动调用改写方法,计算路由路径地址予以实例化加载,以实现不同文件目录下的类的自动加载。改写代码如下:
private static function autoLoad($class_name){
$class_map=array(' MySqIDB =>CORE_PATH.”MySqIDB.class.php”,
'Base' => CORE_PATH.”Base.class.php”);
if(isset($class_map[$class_name])
require
$class_map[$class_namel;
elseif(substr($class_name,一5)==”Model”)
require MOD-EL_PATH.$class_name.“.class.php”;
elseif(substr($class_name, 一10) == ”Controller”) require_URL—.$class_name.”.class.php”;)
3 结束语
本文主要阐述了在PHP语言环境下,应用MVC的框架模式开发Web应用系统中实现类的自动加载,将烦琐的路径加载问题运用依托于地址传值与改写类的自动加载方法得以解决。
参考文献:
[1]闫晓亮,焦素云.MVC模式PHP开发框架[J].长春工业大学学报,2016,37(6):592-596.
[2]赵红霞,王建.基于MVC框架的在线教学管理系统设计与实现[J].信息记录材料,2018,19(9):175-176.
【通联编辑:朱宝贵】
收稿日期:2019 -10 -15
作者信息:张伟伟(1980-),男,安徽六安人,副教授,硕士,主要研究方向为计算机网络与软件开发。