分类:
2009-01-30 00:21:12
<?php
//index.php
//models数组用来保存可以访问的model名称,将在controller函数中验证。
$models = array( 'Index', 'forum', 'thread');
require_once('./kernels/Kernel.php');
?>
<?php
//kernels.php
defined('IN_SIMPLE') ? '' : die('Operation not permitted!');
error_reporting(E_ALL);
function __autoload($name)
{
if (file_exists('./kernels/' . $name . '.php'))
{
@include_once('./kernels/' . $name . '.php');
}
elseif (file_exists('./apps/views/' . $name . '.php'))
{
@include_once('./apps/views/' . $name . '.php');
}
elseif (file_exists('./apps/models/' . $name . '.php'))
{
@include_once('./apps/models/' . $name . '.php');
}
elseif (file_exists('./kernels/databases/' . $name . '.php'))
{
@include_once('./kernels/databases/' . $name . '.php');
}
else
{
die('AutoLoad File ' . $name . ' False!');
}
}
/**
* 控制调用模块
*
* 根据 $_GET['c'] 的值来调用相对应的模块。
*
* array 变量 $models 里存储可以调用的模块列表,
* $models['0']为默认调用的模块,如果$_GET['c']变量的值不存在于$models,
* 则默认调用$models['0']的值做为默认模块.
*
* @param array $models
*/
function Controller( array $models )
{
if( FALSE == isset($_GET['c']) )
{
$controller = $models['0'];
}
else
{
//首字母大写
$controller = ucfirst($_GET['c']);
//如果不存在于模块列表,则调用数组变量$models['0']。
if ( FALSE == in_array($controller, $models) )
{
$controller = $models['0'];
}
}
$controller = 'View_' . $controller;
new $controller;
}
Controller($models);
?>
这样,通过Controller函数,实例化了View的相应代码,这里我们以$_GET['c']='Index'为例,实例化了
View_Index.php文件。上面代码中的new $controller语句完成了对View_Index的实例化。
在View_Index.php中创建类View_Index extends Model_Index,这样关联起model和view。Model_Index类主要是读取数据库内容等,返回一些需要显示或调用的数据。而View_Index类,从其父类Model_Index中取得数据,完成控制显示。
//View_Index.php
class View_Index extends Model_Index
{
function __construct()
{
parent::__construct();
echo $this->mUser . '的年龄是:' . parent::age();
}
}
?>
//Model_Index.php
class Model_Index
{
private $mNumber1;
private $mNumber2;
protected $mUser;
function __construct()
{
$this->mNumber1 = 2009;
$this->mNumber2 = 1982;
$this->mUser = '有点白';
}
protected function age()
{
return $this->mNumber1 - $this->mNumber2;
}
}
?>