从零开始撸一个PHP软件(二)前端子控制器

我是这样构思的,前端我想尽我所能缩短响应时间,所以我希望在前端避过读写数据库,所以我打算尽可能将信息放入独立的文件中,从之中读取;并且我希望能像JQuery一样实现链式操作。如此以来,便有了如下:

一、在mod/controller/目录下建立文件App.php,写入代码:<?php
/*
*write by yuhou@brain yin
*20170928
*/
class App extends Base implements Application{
//
private $_config;//系统配置文件
private $_para;//客户端传回的请求参数
private $_tree;//系统的结构文件

//构造函数
function __construct($config = null){
$model = new DbModel(‘test’);
$this->loadConfig($config);
}

//接口的run函数
function run(){
//echo “i am run”;
$this->loadView();//载入视图文件
return $this;//返回类本身,由此实现链式操作
}

//加载配置信息
function loadConfig($config){
$this->_config = $config;
echo “<br>配置文件写入成功!”;
$this->_tree = include(APP_ROOT.”/mod/config/Tree.php”);//载入结构文件
echo “<br>结构文件写入成功!”;
if($this->_para === null){
$parameter = new parameter();
$this->_para = $parameter->decodePara()->getPara();//这里可以初见链式操作的威力了,可以用较少的代码组合出高自由度的执行顺序
}
return $this;
}

//获取配置信息
function getConfig(){
return $this->_config;
}

//获取请求信息
function getPara(){
return $this->_para;
}

//获取结构树
function getTree(){
return $this->_tree;
}

//获取GET信息
function printPara(){
print_r($this->_para);
return $this;
}

//获取结构树
function printTree(){
print_r($this->_tree);
return $this;
}

//打印配置信息
function printConfig(){
print_r($this->_config);
return $this;
}

//加载视图控制器,暂时没写,因为还没有想好视图模块结构,写视图的时候补上
function loadView(){

}
}
?>

二、在mod/class/目录下创建文件Paramete.php并写入代码:<?php
/*
*write by yuhou@brain yin
*20170926
*/
class Parameter{
private $para;

//对参数进行解码,之所以这样做,是因为这样修改参数较容易并且扩展性强
public function decodePara(){
//echo “i am docodePara!”;
if(!DEBUG && !empty($_GET[‘para’])){如果不是调试模式,并且有请求,对参数解码
$this->para = explode(“,”,$_GET[‘para’]);//约定参数以,为界进行解码
}
else
$this->para = include(APP_ROOT.”/mod/config/Para.php”);
return $this;
}

//获取参数集合
public function getPara(){
return $this->para;
}

//打印参数集合
public function printPara(){
foreach($this->para as $key=>$value){
echo “<br>”.$key.”:”.$value;
}
return $this;
}

//设置参数
public function setPara($para = null){
if(DEBUG || !$para){
echo “设置参数失败!”;
}
else{
$this->para = $para;
}
return $this;
}
}
?>

三、在mod/config/文件夹下建立文件Tree.php并暂时写入代码,以供测试:<?php
return array(
“企业信息”=>”qyxx”,
“企业文化”=>”qywh”,
);
?>

在mod/config/文件夹下建立文件Para.php并写入代码:<?php
return array(“default”, “”, “”, “”, “”);//这是我预定义的参数结构,推荐5个参数以内
?>

四、将入口文件index.php中代码改写为:
define (“APP_ROOT”, dirname(__file__).DIRECTORY_SEPARATOR);
include(“mod/YhShow.php”);
//载入配置文件
$config_path = “mod/config/config.php”;
$config = is_file($config_path)?include($config_path):null;
//加载程序
YhShow::createApp(“App”,array(“version”=>1.3))->run()->printPara()->printTree()->printConfig();//这里更加充分体现了JQuery链式思想的强大之处!

在浏览器输入地址http://localhost/yhshow/回车,浏览器输出:

配置文件写入成功!
结构文件写入成功!Array ( [0] => default [1] => [2] => [3] => [4] => ) Array ( [企业信息] => qyxx [企业文化] => qywh ) Array ( [version] => 1.3 )

编写成功!

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注