PHP框架写,如何用PHP写一个框架

大三学生一枚,第一次写框架,仿照着THINKPHP 3.2.3,写的不好请多多包涵

树形图如图所示

kakoi 文件夹存放着核心配置文件

Home 文件夹中包含着控制层Controller

数据层Model

以及模板层View和缓存Cache

PUBLIC 主要存储 JS/CSS/等

框架是基于单入口文件 index.php

此处可以实现分组操作。

引入核心配置 buildFile($OTHER);//创建控制器$build->buildController();//创建配置文件$build->buildConfig();$moudle = isset($_GET['moudle'])?$_GET['moudle']:'Home';$controller = isset($_GET['controller'])?$_GET['controller']:'Index';$method = isset($_GET['method'])?$_GET['method']:'Index';// echo $moudle."";// echo $controller."";// echo $method."";//模板存放路径$path = EVENT."/".$moudle."/View/";$cache = EVENT."/".$moudle."/Cache";$Controller = new Controller();//引入数据库配置文件$data = require_once(EVENT."/Config/Config.php");require_once("/DB/DB.class.php");$DB = new DB($data);require_once("/View/Template.class.php");//引入模板$arrayConfig = array("suffix" => ".m", //设置模板文件"templateDir" => $path, //设置模板所在的文件夹"compileDir" => $cache,"debug" => false,//设置编译后存放的目录"cache_htm" => true,//是否需要编译成静态的html文件"suffix_cache"=> ".htm",//编译后的文件后缀"cache_time" =>2000,// 多长时间自动更新"php_turn" =>false,//是否支持原生的php代码"cache_control" => "control.dat",);static $tpl;//获取模板对象$tpl = Template::getInstance($arrayConfig);//var_dump($tpl); $handle = handle::getInstance();$handle->C($moudle,$controller,$method);//传入数据库配置参数

Config 文件配置信息 'localhost', 'DB_USER'=>'root', //用户名'DB_PWD'=>'', //密码'DB_NAME'=>'test', //数据库名称'DB_PORT'=>'3306', //端口号'DB_TYPE'=>'mysql', //数据库类型'DB_CHARSET'=>'utf-8', //字符集);?>

创建用户的APP文件 ";static $config="'localhost', 'DB_USER'=>'root', //用户名'DB_PWD'=>'', //密码'DB_NAME'=>'test', //数据库名称'DB_PORT'=>'3306', //端口号'DB_TYPE'=>'mysql', //数据库类型'DB_CHARSET'=>'utf-8', //字符集);?>";private static $instance = null;static function getInstance(){if(self::$instance){return self::$instance;}else{self::$instance = new buildDir();return self::$instance;}}public function __construct(){}//创建文件夹public function buildFile($path = 'Home'){//echo $path;$this->path = $path;if(!is_dir(EVENT)) mkdir(EVENT,0775,true);if(is_writable(EVENT)){$dirs = array(EVENT."/".$path,EVENT."/Public",EVENT."/Config",EVENT."/".$path."/Controller",EVENT."/".$path."/Model",EVENT."/".$path."/View",EVENT."/".$path."/Cache",);foreach($dirs as $dir){if(!is_dir($dir))mkdir($dir,0775,true);}}}public function buildController(){$controller =EVENT."/".$this->path."/"."Controller";if(is_dir(EVENT."/".$this->path))if(!is_file($controller."/IndexController.class.php")){ $temp=$controller."/IndexController.class.php";$myfile = fopen($temp,"w")or die("Unable to open file!");fwrite($myfile,buildDir::$content);}}public function buildConfig(){$data = EVENT."/Config";if(!is_file($data."/Config.php")){$temp=$data."/Config.php";$myfile = fopen($temp,"w")or die("Unable to open file!");fwrite($myfile,buildDir::$config);}}}

数据库的CURD操作 table = $Config['DB_NAME']."_";}}public function M($table){$table = strtolower($table);$this->table.= $table;}public function insert($data){$table =$this->table;global $key;global $value;foreach($data as $key_tmp =>$value_tmp){$key.=$key_tmp.',';$value.="'".$value_tmp."'".',';}$key=rtrim($key, ",");$value=rtrim($value, ",");$sql = "insert into ".$table."(".$key.")values(".$value.")";//sql的插入语句 格式:insert into 表(多个字段)values(多个值)self::$link->query("SET NAMES utf8"); $result=self::$link->query($sql);//调用类自身的//return$result;}public function update($data){//$table =$this->table; //指定数据的表global $field;foreach($data as $value=>$key){$field.=$value."="."'".$key."'".",";}$field=rtrim($field,",");echo $field."";$this->update = $field;return $this;//将数据存入到 this 中传志// $sql="update ".$table." set ".$field." where ".$where."";// echo $sql;// self::$link->query("SET NAMES utf8"); // self::$link->query($sql);}public function where($where){$sql="update ".$this->table." set ".$this->update." where ".$where."";self::$link->query("SET NAMES utf8"); $result = self::$link->query($sql);return $result;}public function select(){self::$link->query("SET NAMES utf8"); $sql = "select * from ".$this->table;$this->sql = $sql;$rs = self::$link->query($sql);$rs->setFetchMode(PDO::FETCH_ASSOC);//返回关联数组$result = $rs -> fetchAll();return $result;//return $result;}public function delete($where){$sql = "delete from ".$this->table." where ".$where."";//sql的插入语句 格式:insert into 表(多个字段)values(多个值)self::$link->query($sql);//调用类自身的}// public function limit($limit){// return "123";// }// public function execute($result = array()){// var_dump($result);// }//魔术方法实现public function __call($fun,$args){if(in_array($fun,array("limit","getField","find"))){echo $fun."";}}}

View层在之前的博客中有提到 链接:View层模板

模板主要是通过INDEX.PHP?moudle?=x&controller=x&method=x

之前考虑用伪静态来实现,后来无论如何接受不到参数就放弃了

代码如下: $nav=$_SERVER["REQUEST_URI"]; // echo "request:".$nav.""; // $script_name=$_SERVER["SCRIPT_NAME"]; // echo "script_name:".$script_name.""; // $nav1 = str_replace($script_name,"",$nav); // echo $nav1; // $vars = @explode("/",$nav1); //var_dump($vars); // echo $script_name.""; // echo substr(ereg_replace("$script_name","",urldecode($nav)),1); // echo $script_name; // $nav1=ereg_replace(".html","",substr(ereg_replace("$script_name","",urldecode($nav)),1)); // echo $nav1; // $vars = @explode("/",$nav1); // $_url = array_chunk($vars,3); // $_GET['m'] = $vars[0]?$vars[0]:'index'; //如果没有参数,默认访问index类库的index方法 // $_GET['a'] = $vars[1]?$vars[1]:'index'; // $_GET['d'] = $vars[2]?$vars[2]:'index'; // unset($_url[0]); // if($_url){ // foreach($_url as $key=>$val){ // @$_GET[$val[0]] = $val[1]; // } // }// var_dump($_GET);

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值