CODE:[Copy to clipboard]<?php
class Application
{
function Application()
{
}
function getAction()
{
}
function run()
{
$pageClass = $this->;getAction();
include_once ("class.".$pageClass.".php");
$page = & new $pageClass();
$page->;show();
}
}
?>;
为什么getAction()空着?因为它太简单了,你自己可以轻松地把它写出来呀。
看到这里,如果你还不太明白,不用急,可以停下来重新再看一遍。
如果全明白了,我们就继续前进。我们还有半个任务没有完成,所以我们需要改进我们的Application和页面类,让它完成数据库操作功能。
进行数据库操作之前首先应当得到一个正确的数据库连接,如果让每个需要数据库连接的页面类去做这样的工作实在是一件非常费时费力的工作,不容易维护管理而且也破坏了oop的设计初衷,进行数据库操作的页面类例如 DatabasePage 只应当完成它份内工作即获得数据。 仔细看看我们的设计不难发现建立数据库连接的工作交给 Application 来做最合适不过了, 所以给Application 增加一个新的成员 $db 并且在初始化的时候将建立的数据库连接赋值给它。
CODE:[Copy to clipboard]<?php
require_once ("class.Database.php");
class Application
{
var $db;//数据库对象
function Application()
{
$this->;db = & new Database(DB_HOST,DB_NAME,DB_LOGIN,DB_PASS);//$db 现在是一个数据库对象了
}
function getAction()
{
return
funciton & getDatabase()
{
return $this->;db;
}
function run()
{
$pageClass = $this->;getAction();
include_once ("class.".$pageClass.".php");
$page = & new $pageClass($this); //这里是唯一做了手脚的地方,将这个Application对象传给页面对象。
$page->;show();
}
}
?>;
你现在不用太关心这个 Database对象从何而来如何实现,知道它是一个含有数据库连接的对象就可以了,如果用过phplib, ADODB,或者Pear库的就很容易理解。
这个语句:
$this->;db = & new Database(DB_HOST,DB_NAME,DB_LOGIN,DB_PASS);
就是建立一个数据库连接而已。
至于DB_HOST,DB_NAME,DB_LOGIN,DB_PASS 这些都是常量我们在config.php中已经预先设定。
由于数据库操作页面 DatabasePage 需要进行数据库连接所以它也需要一个变量 $db 来保存数据库对象,所以我们需要把DatabasePage改进成这样:
class.DatabasePage.php
CODE:[Copy to clipboard]<?php
require_once ("class.Page.php");
class DatabasePage extends Page
{
var $db;
function DatabasePage(&$app)//将Application对象作为参数接受。
{
parent::Page();
$this->;db = $app->;getDatabase();//获得 Application 中的数据库对象。
}
function show()
{
$sql = ''SELECT * FROM sale_orders'';//简单的一个 SQL 例子。
$results = $this->;db->;query($sql);//query 是 Database对象的一个公共的方法,通过它向数据库提交SQL查询。
;//做一些操作把得到的结果显示出来。
}
}
?>;
好了,一个半的功能算是完成了,PHP对于OOP支持得也很漂亮吧,结构清晰,维护方便,至于效率嘛,我可没看出来有什么损失,如果你有兴趣可以自己测试一下。用这样的框架可以轻松应对各种需求的变化:增加各种权限控制,分离数据库层,商业逻辑,和表象层,增加远程调用接口统统不成问题,只是这里实在写不完