频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛
PHP开发资源网 主页>>开发技巧>> 收藏此文 | 收藏本站 | 设为首页

PHP Oop+模板编程示例程序(3)

来源:www.phpx.com 作者:lwg888 出处:www.phpx.com 2007-4-27 20:43:51 进入讨论组
关 键 词: 程序 编程 模板 this // app function var 显示 CPage

上面的代码中有一个方法includeClass(),专门用来包含类与函数等文件,注意,请不要用它来包含配置文件、普通PHP文件等。
Application类还继承了PhpClass类。PhpClass类里面是些什么东些呢?在我所有的类库中,基本上每个类中都要用到一些相同的方法与属性,比如错处理catchErr()等,将它们封装起来,作为所有类的祖类。
PhpClass的完整代码如下:
PhpClass.inc.php

CODE:
<?php

if(!defined("__CLASS_PHPCLASS__"))
{
    
define("__CLASS_PHPCLASS__",1);


    class 
PhpClass{

        var 
$debug          false;     //是否显示调式信息
        
var $debugMsg       '';        //记录调式信息
        
var $errMsg         '';        //记录第一次的错误信息
        
var $error_report   true;      //是否输出错误信息
        
var $error_halt     true;      //出错后是否停止执行

        //为成员变量赋值
        
function setVal($name,$value)
        {
            
$this->$name $value;
        }

        
//取得成员变量的值
        
function getVal($name)
        {
            return 
$this->$name;
        }

        
//捕获错误
        
function catchErr($msg)
        {
            if(empty(
$this->errMsg)) $this->errMsg $msg;

            if (
$this->error_report) echo $this->errMsg;

            if (
$this->error_halt) exit;

            return 
false;
        }

        
//输出错误
        
function err($exit false)
        {
            if (!empty(
$this->errMsg))
            {
                echo 
$this->errMsg;
                if (
$exit) exit;
            }
        }

    }
// end class

}// end if defined
?>
下面我们回到list.php中去,看子功能模块如何运作
从前面的介绍我们知道了list.php,必有一个类CPage且其中必定有两个函数:
一个构造函数CPage(),一个execute();
通过构造函数的参数将$app对象接收到,那么简单代码如下:

CODE:
list.php
<?php
class CPage
{
    function 
CPage(& $app//$app就是Application对象的实例
    
{
    }

    function 
execute()
    {
    }
}
?>
由于很多子功能模块可能要完成一些共同的功能,如显示logo,copyright等,我们可以将这样共同的功能封装在一个类中,命名为Page类,作为所有子功能模块的父类,所有子功能模块都从它继承。
看一下Page.inc.php:

CODE:
<?
class Page
{
    var 
$app;
    var 
$vars=array();

    function 
Page(&$app)
    {
        
$this->app = & $app;
    }
    function 
setCopyRight()
    {
        
$this->vars['copyright'] = "CopyRight:Lwg888";
    }
}
?>
list.php中的CPage类就从Page类继承
代码示例:

CODE:
<?php
include("Page.inc.php");

class 
CPage extends Page
{
    var 
$pt;
    var 
$app;

    function 
CPage(& $app)
    {
        
$this->Page($app);
    }

    function 
execute()
    {
        
$db $this->app->connectDb();    //利用Application对象中的数据库连接方法
        
$sql"select * from table ...";
        
$this->app->includeClass ('PageTurn');  //载入PageTurn.inc.php翻页类文件
        
$pt = & new PageTurn(20);         //初始化翻页类,每页显示20条
        
$pt->query($sql,$db->conn);       //执行SQL语句
        
$this->pt = & $pt;
        
$this->show();                    //显示网页
    
}

    function 
show()
    {
        
$tpl=$this->app->tpl();             //建立模板对象
        
$tpl->set("loop",$this->pt->field);
        
$tpl->set("copyright",$this->vars['copyright']);  //Page类中的 $vars['copyright']
        
echo $tpl->parse('list.tpl');       //显示模板
    
}
}
?>
上面用到了分页类PageTurn与模板类Vant,大家可以参考下载中的相关类

讲了这么多,我们已经基本上弄清了用OOP+模板方式写程式的方法,下面就来总结它的好与歹。
如果你不喜欢用OOP方式编程,你可以说:类=累。我同意,但不以OOP方式编程,运行速度是会快一些,而你会变的很累,不管是业务逻辑的组织还是今后代码的维护,都不是一件轻松的事。在机器性能日益提高和网络宽频日益普及的今天,速度不是单方面追求的目标,我们要在速度与代码易用性、易编写性之间取得平衡。

从上面的讲解我们可以看出:完全实现了Model模型/逻辑、View视图/界面、Controller控制/流程 的分离。使得结构非常清晰,维护非常方便,模型设计者,界面设计者与流程控制设计者能更好的分工与合作。代码可重用,今后如果要开发一个新的项目,很快就能完成,因为你可能只需叫美工重新设计一下模板,或者稍稍修改一下子功能模块。

还有一点不得不提:
index.php是一个统一应用程序接口,通过$_GRT['action']或$_POST['action'],决定执行哪个子功能模块。当它执行该模块时是将它include进来,因此所有的操作都是在index.php中进行,所呈现的网页都是index.php?action=...,这样使我们控制流程非常方便。比如要显示用户列表,只需调用list.tpl模板,要显示错误信息,只需调用errmsg.tpl模板,甚至不必要使用header("location:..")来转向,不管是显示用户列表还是显示错误信息,所有的$_GRT或$_POST或其它变量都还在,不用象转向时那样用?xx=...传一大堆变量过去,不是有不少人常问“数组能不能传递?”“对象能不能传递?”,

写到这里,一点劣见,望大家指正 。
欢迎进入PHP开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱