`
zhangchibang
  • 浏览: 345040 次
社区版块
存档分类
最新评论

浅谈PHP开发中的MVC单点入口模式

    博客分类:
  • PHP
阅读更多

转载自:   http://semiscon.blog.51cto.com/157645/36976

版权属于原作者

 

何谓单点入口呢?我想PHP4时代的时候有一个很响亮的代名词“工厂模式”,因为你在开发一个大型项目的时候可能会遇到N多的类和需要你包含的类库文件, 如果你把所有的类文件都写在一个程序页面里,在每一个需要使用的页面上都include包含过来,这样将会造成效率大大降低。
不过还好,php5时代多了一个相当实用的函数__autoload(),也就是说你只需要将这个函数的文件包含进来,在你声明一个对象以后,这个函数会自动加载这个类文件,下面我用实例来演示一下如何使用__autoload()来完成MVC模式下的单点入口结构。

这是我一个流量分析系统的整体结构
大家可以很清晰的看到,整个系统下面只有index.php文件作为调度文件,你可以暂时把他理解成一个工厂的传达室。
cache是smarty模版的缓存文件目录.
compile是模版编译过后的暂存文件
images存放图片素材和CSS样式表
lib库文件存放目录核心目录之一
smarty模版主目录
tpl存放的是HTML静态模版,当然在必要的时候也做一些简单的判断。
www整站系统的核心目录。
我们先看一下index.php 里面的内容

<?php

/*
############################网站流量分析系统页面注释##########################
系统核心文件,包含实例化一个smarty对象
根据GET得到的参数来选择调用哪一个程序页面
@Email: semiscon1983@hotmail.com.cn
*/
//include_once("./lib/class.php");
//做个对比,没有使用__autoload之前需要包含成个库函数
//页面是干净了,但效率依然低下
include_once("./lib/public_function.php");       
//使用__autoload()函数自动调用相对应的类文件
include_once('./smarty/Smarty.class.php');
$s = new Smarty;
//$s->caching = true;//开启缓存功能
$s->template_dir = './tpl';
$s->compile_dir = './compile';
$s->cache_dir = './cache';

$n = strtolower(trim($_GET['n']));
//用trim去掉前后空格 然后用strtolower进行小写转换
//如果传入参数n的值为空就调用main.php页面进行转向index.html
if (empty($n)) { $s->display("index.html"); exit(); }

switch($n) {
    case "last"                     :    include_once "./www/lastvisit.php";                break;
    case "daily"                        :    include_once "./www/daily.php";                break;
    case "month"                    :    include_once "./www/month.php";                break;
    case "year"                        :    include_once "./www/year.php";                break;
    case "area"                        :    include_once "./www/area.php";                break;
    case "ref"                        :    include_once "./www/ref.php";                    break;
    case "query"                    :    include_once "./www/query.php";                break;
    default                            :    $s->display("index.html");
}
?>
一个核心调度文件就是这么简单,根据GET过来的值来引入相对应的程序页面。我们再看看包含文件之一的./lib/public_function.php
<?php
function __autoload($class_name)
{
    require_once $class_name . '.php';
}
?>
这时候我在一个www目录下的程序里面声明对象的时候就不需要再把这个类文件包含过来了
比如www目录下的daily.php
<?php
include("conn.php");
//##############获得今天日期######################
$date1 = date("Y-m-d");
//如果用户GET过来一个值是act的一个函数
if(isset($_GET["act"])) { //判断这个变量是否被设置了
    $yyy = sprintf("%04s",$_GET["y"]); //年数据
    $mmm = sprintf("%02s",$_GET["m"]); //月数据
    $ddd = sprintf("%02s",$_GET["d"]); //日数据
    $date1 = $yyy."-".$mmm."-".$ddd;   //根据用户输入的参数,得到日期字符串
}
/*
以上这些代码是为了历史查询页面搜索数据时使用的
*/
$date2 = date("Y年m月d日");
$s->assign("today",$date2); //将本月的日期传入模版
//------------- 创建daily对象实例-----------------
$daily = new daily(); //只需要去声明这个对象就可以了,系统自动包含类文件
//-------------导入当前时间的函数------------------
$daily->__getSql("select name,value from counter_daily where date='$date1' ;");
$daily->__setDate($date1);
//--------将相对应的属性和函数返回值赋值给变量--------
$h = $daily->__getHour();
$sum = $daily->sum;
$hper = $daily->__getPercent();
//-------------将获得变量传入模版------------------
$s->assign("h",$h);
$s->assign("sum1",$sum);
$s->assign("hper",$hper);
$s->display("daily.html");
?>
而且__autoload()函数还可以自动把继承的父类也一起调用,比如这个每月流量分析表的类文件就很简单
./lib/month.php
<?php
//-----月份查询使用的类,继承daily类部分属性和方法--------
class month extends daily {
         public $i =1;
         public $s = 32;
}
?>

其实我并没有完全按照MVC的架构去写这个系统,只是实现了视图view和控制器controller,那么逻辑层的模型Model被一个执行层代替了,也就是说用index.php进行控制和调用,tpl下的编辑模版去面向客户,然后由mod和lib进行执行和运算。

以上只是我这段时间在家学习PHP的一点心得,希望能对和我一样喜欢PHP的朋友有一些帮助。

分享到:
评论

相关推荐

    PHP开发中MVC模式的应用研究.pdf

    “PHP开发中MVC模式的应用研究” 本文旨在探讨PHP开发中MVC模式的应用研究,涵盖MVC模式的主要构成要素、设计原理、具体应用等方面。MVC模式是软件设计与开发中的一种重要模式,它的主要构成要素包括模型、视图、...

    MVC模式与PHP开发框架——MVC模式与PHP开发框架

    MVC模式是PHP开发中的重要概念,通过分离关注点,提高了Web应用的可维护性和可扩展性。Zend Framework作为PHP的主流框架之一,充分利用了MVC模式的优势,提供了良好的开发框架和工具,使得开发者能够更高效地构建和...

    PHP与MVC开发模式.pdf

    ### PHP与MVC开发模式详解 #### MVC设计模式概述 MVC,即Model-View-Controller,是一种广泛应用于软件工程,尤其是Web应用开发中的设计模式。该模式最早可追溯至20世纪70年代,旨在解决软件开发中的复杂性和耦合...

    java中MVC设计模式

    很多开发者对 MVC 模式有误解,认为 MVC 模式只能用于 Web 开发,实际上,MVC 模式可以应用于任何软件开发中。还有一些开发者认为,MVC 模式很难实现,实际上,MVC 模式只是将应用程序分离成三个独立的部分,并不难...

    MVC开发模式详解

    MVC 开发模式详解 MVC(Model-View-Controller)是一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法。MVC 的全名是 Model View Controller,是模型(Model)-视图(View)-控制器(Controller...

    浅谈三大模式(mvc,mvp,mvvm)

    这些模式在构建用户界面时起着至关重要的作用,尤其是在Web和移动应用开发中。 首先,我们来理解MVC模式。Model代表应用程序的数据模型,负责存储和管理数据;View是用户界面,用于展示数据;Controller作为两者...

    MVC前提之单一入口+例子

    在软件开发中,特别是Web应用程序领域,MVC(Model-View-Controller)模式是一种广泛使用的架构模式,它有助于将业务逻辑、数据处理和用户界面分离,提高代码的可维护性和可扩展性。在MVC架构中,"单一入口"是一个...

    浅谈框架与MVC

    ### 浅谈框架与MVC #### 架构的重要性及概念 在软件开发领域,架构设计扮演着至关重要的角色。良好的架构设计不仅能够确保软件系统的稳定性、可维护性和可扩展性,还能提升团队协作效率。正如文章所述,“好的产品...

    浅谈模型-视图-控制器(MVC)模式

    ### 浅谈模型-视图-控制器(MVC)模式 #### 一、MVC模式简介 MVC(Model-View-Controller),即模型-视图-控制器模式,是一种广泛应用于软件开发领域的设计模式,特别是在桌面应用和Web应用程序中。这种模式的...

    asp.net mvc 单点登录(SSO)Demo

    asp.net mvc 单点登录Demo 无需第三方单独域名 实现原理可以参见codeproject中的单点登录的一篇文章: http://www.codeproject.com/Articles/106439/Single-Sign-On-SSO-for-cross-domain-ASP-NET-applic

    Android学习之浅谈对MVC模式和MVP模式的理解

    本文将深入探讨两种常见的设计模式——MVC(Model-View-Controller)和MVP(Model-View-Presenter),并结合实际的TestMVP项目,解析它们在实际开发中的运用。 首先,我们来了解一下MVC模式。MVC是一种软件设计模式...

    简要介绍MVC开发模式

    **MVC 开发模式详解** MVC(Model-View-Controller)是一种广泛应用于软件开发,尤其是Web应用开发的架构模式。这种模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以实现更...

    php的mvc模式开发框架

    这是一个根据MVC模式开发的一个小型框架。 说明: framework文件是框架文件,可将其重命名成你的项目名 Index.php文件是项目的入口文件 Config目录下的config文件配置了数据库的连接,网站url的访问方式 Control...

    MVC设计模式下开发项目

    **MVC设计模式详解及其在项目开发中的应用** MVC(Model-View-Controller)设计模式是一种广泛应用在Web开发中的架构模式,它将应用程序的业务逻辑、用户界面和控制逻辑分离,以提高代码的可维护性和可重用性。在这...

    浅析MVC模式在WEB开发中的应用

    ### 浅析MVC模式在WEB开发中的应用 #### 引言 随着互联网技术的快速发展,Web应用程序变得越来越复杂和庞大。传统的嵌套和面向过程的开发方式已无法满足当前项目的需求。在这种背景下,MVC(Model-View-Controller...

    MVC框架模式在PHP开发中的应用(自创)

    在PHP开发中,MVC(Model-View-Controller)框架模式是一种常见的软件设计模式,它将应用程序的不同部分分离开来,使得代码结构清晰,易于维护和扩展。MVC模式主要包含三个核心组件: 1. **模型(Model)**:模型层...

    经典mvc模式开发好

    在实际开发中,有许多流行的Web框架采用了MVC模式,例如Java的Spring MVC,PHP的Laravel,ASP.NET的ASP.NET MVC,以及前端的AngularJS等。这些框架提供了强大的工具和结构,帮助开发者遵循MVC模式构建应用程序。 **...

    jsp中的 mvc模式开发 实例

    本实例主要探讨如何在JSP中应用MVC模式进行开发,特别适合初学者学习。 **一、MVC模式介绍** MVC模式是一种软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种...

    浅谈MVC设计模式与MFC文档结构

    总结来说,MVC设计模式通过分离关注点,提高了软件的可维护性和可扩展性,而MFC的Doc/View架构则是MVC模式在Windows应用开发中的具体实现,它通过提供丰富的类库和事件驱动机制,简化了MVC的使用,使得开发者能够更...

Global site tag (gtag.js) - Google Analytics