最近整合了跟着视频整合了一下mvc框架和smarty模板,收获挺多的,对面向对象的模式理解更深刻了,加深对mvc框架的搭建和运行流程了解。
以下是框架主入口的代码:
<?php
final class Hd{
static public function run(){
// echo "run"."<br/>";
self::selfConf();#运行时候定义一些常量
self::createDemoApp();
self::loadSysFile();
self::appRun();
}
static private function selfConf(){
// echo "selfConf"."<br/>";
$control=isset($_GET['c'])?$_GET["c"]:"index";
$method=isset($_GET['m'])?$_GET['m']:"index";
// echo $control.'<br/>';
// echo $method."<br/>";
define("METHOD",$method);
define("CONTROL",$control);
define("PATH_HD",dirname(__FILE__));#获取框架文件的核心目录d
define("PATH_ROOT", dirname(PATH_HD));#网站根目录
define("PATH_TEMP",PATH_HD."\\temp");#临时文件夹
define("PATH_APP",PATH_HD."\\". 'APP');#应用文件夹
define("PATH_CONTROL",PATH_APP.'\\'.'CONTROL');#控制器文件夹
define("PATH_TPL",PATH_APP.'\tpl');#模板目录
// echo PATH_HD."<br/>";
//
// echo PATH_ROOT."<br/>";
//
// echo PATH_TEMP."<br/>";
//
//
// echo PATH_APP."<br/>";
//
//
// echo PATH_CONTROL."<br/>";
//
//
// echo PATH_TPL."<br/>";
//
//
}
static private function createDemoApp(){
// echo "demoApp";
if(is_dir(PATH_TEMP ) || is_dir(PATH_CONTROL)) return ;//如果临时文件夹和控制器文件夹存在就不执行下面的代码
self::createDir();#创建运行目录
$data=<<<str
<?php
//后盾网,人人当后盾
class IndexControl extends Control{
function Index(){
echo "<h1 style='border:solid 1px #eee ;padding:20px '> welcome to houcdun wang</h1>";
}
}
?>
str;
//echo $data;
$controlFile=PATH_CONTROL."\\IndexControl.class.php";
//echo $controlFile;
file_put_contents($controlFile, $data);
}
static private function createDir(){
//echo "CreateDir"."<br/>";
//echo is_dir(PATH_APP);
if(is_dir(PATH_APP)) return;
$dirs=array(
PATH_TEMP,
PATH_APP,
PATH_TPL,
PATH_CONTROL
);
// var_dump($dirs);
foreach($dirs as $d){
$dir=true;
is_dir($d) || $dir=mkdir($d,0777,true);//不存在该目录就新建目录
if(!$dir){
echo "创建".$d."目录失败"."</br>";
}
}
}
static private function loadSysFile(){
// echo "LoadSysFile<br/>";
$files=array(
PATH_HD.'/core/functions.php',
PATH_HD.'/core/Control.class.php',
PATH_HD.'./core/Model.class.php'
);
foreach($files as $f) {
is_file($f)&& include($f);
}
}
static private function appRun(){
include PATH_HD.'\\config.inc.php';
$controlFile = PATH_CONTROL."\\".CONTROL.'Control.class.php';
// echo $controlFile."<br/>";
is_file($controlFile) || die("FILE not exists");
//print_r(get_included_files());
include $controlFile;
$control=CONTROL.'Control';
$method=METHOD;
$obj=new $control;
$obj->$method();
}
}
Hd::run();
?>