自己编写php框架(一)
这两天一直在琢磨如何做一个php模板,将前台html页面和php代码分割开来。虽然现在市面上有各种各样的php模板,但还是想自己编写一个体验一下。
之前一直写到了将替换完php代码的含有php代码的html页面作为字符串输出的地方。在此处遇到了一点麻烦。即如果直接将这些字符串使用echo输出的话,其中的php代码是不会被解析的。
在网上查看别人框架的代码和thinkphp源码后,发现有种方法是将替换完php代码的前端页面字符串重新写入一个后缀为php文本。再将此文本include进来。
于是我就先编写了一个“0.1版本“的框架(因为很多因素都还未考虑,如已加载过的页面再次加载时,如果内容没有改动,则不需要重新替换其中的字符串,而是直接调用上次的php文本即可。再者路径也没规定明确)。这个版本只是一个demo,日后再慢慢完善。
目前的整体思路过程为:
一、有一个config类用来放置对数据库属性的定义
二、有一个connection类其中封装有各种对数据库操作的方法
三、之后在另一个php文档里创建connection类对象并进行操作,获取原始html页面的内容,并对其进行php代码的替换。再将替换完的字符串全部存入另一个php文档里面,之后再将此文档include进来。
config.php
<?php
class config{
public $mysql_url="localhost"; //数据库连接地址
public $mysql_username = "cly"; //用户名
public $mysql_password = "12345"; //用户密码
public $mysql_database = "car_project";//数据库名
}
?>
connection.php
<?php
/**
* Created by PhpStorm.
* User: CLY
* Date: 2015/12/27
* Time: 16:57
*/
require("config.php");
//数据库连接类
class connection {
private $key_list;//表名
private $key_line; //查询列名
private $key_where; //查询条件
private $db;//数据库连接实例
function __construct($get_database){
$this ->key_list = $get_database;
$db_config = new config();
//将config中的各值赋到当前对象属性中
$mysql_url = $db_config->mysql_url;
$mysql_username = $db_config->mysql_username;
$mysql_password = $db_config->mysql_password;
$mysql_database = $db_config->mysql_database;
$this->db =new mysqli($mysql_url,$mysql_username,$mysql_password,$mysql_database);//创建数据库连接实例
//如果数据库连接实例创建失败则报错
if(mysqli_connect_error()){
echo 'Could not connect to database.';
exit;
}
mysqli_query($this->db,'set names utf8');
return $this;//返回当前对象
}
//输入参数:所要查询的列名,如果为空则默认为查询所有列
public function select($sql_line="*"){
$this->key_line = $sql_line;
return $this;
}
//输入参数:查询条件
//注:方法中传入的参数里,没有赋初始值的为必传参数,而赋了初始值的参数为可选参数。
//如下面这个where方法,其中的$sql_where在传入参数时为所传参数,而没有传入参数时为初始化的值。
public function where($sql_where=""){
$this->key_where = $sql_where;
return $this;
}
//对sql语句进行执行
public function result(){
$line = $this->key_line;
$where = $this->key_where;
$database = $this->key_list;
$result_array = array();
//判断是否有条件语句执行不同的sql语句
if($where ==""){
$result = $this->db->query("SELECT $line FROM $database");
}else{
$result = $this->db->query("SELECT $line FROM $database WHERE $where");
}
/**
* 下面这么处理的原因:
* 一般对查询结果的处理只有几种办法,我选择了使用fetch_array来进行处理
* 目的是:该二维数组里头的每一个一维数组内的键值名为表中的列名,这样在前台页面书写代码获取数据库中的内容时可以写列名来进行判定。
*/
$i=0;
while($row = $result->fetch_array()){
$result_array[$i] = $row;
$i++;
}
return $result_array;
}
}
?>
change_web.php
<?php
/**
* Created by PhpStorm.
* User: CLY
* Date: 2015/12/31
* Time: 16:04
*/
require("connection.php");
header("Content-type: text/html; charset=utf-8");//用处:自动设置浏览器的编码格式为utf-8(当然也可以在浏览器里面手动调整编码格式)
$connection = new connection('yc_brand');
$result = $connection->select()->where()->result();
//===============================================================================
//准备替换的内容
$array_keys = array_keys($result[0]);//获取数组键值名
$array_search_keys = array();
$array_replace_keys = array();
for($i=0;$i<sizeof($array_keys);$i++){
$array_search_keys[$i] = '{mykey.'.$array_keys[$i].'}';
$array_replace_keys[$i] = '<?php echo $result[$i]['."'".$array_keys[$i]."'".']?>';
}
$array_search = array('<my_label>','</my_label>');
$array_replace = array('<?php for($i=0;$i<sizeof($result);$i++){ ?>','<?php } ?>');
//===============================================================================
//替换其中的自定义标签为php标签
$web_file = file_get_contents("demo_web.html");//将前端页面转换为字符串
$result_web1 = str_replace($array_search,$array_replace,$web_file);
$result_web = str_replace($array_search_keys,$array_replace_keys,$result_web1);
//===============================================================================
//创建新的php页面
$file_php = "result.php";//替换完代码后的php结果页面路径
$fp = fopen($file_php,"w");//使用w方式打开。注:用w方法打开可以当文件不存在时自动创建。
fwrite($fp,$result_web);//将替换完毕后的网页的字符串写入该文档。
fclose($fp);
include($file_php);//再将该文档引入进来,否则无法查看新页面
自己编写php框架(一)的更多相关文章
- (转)在编写Spring框架的配置文件时,标签无提示符的解决办法
http://blog.csdn.net/yerenyuan_pku/article/details/52831618 问题描述 初学者在学习Spring框架的过程中,大概会碰到这样一个问题:在编写S ...
- python web开发 编写web框架
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143233900 ...
- Magicodes.IE编写多框架版本支持和执行单元测试
背景 很多情况下,我们编写了一些工具库之后,往往在某些框架版本中会出现一些问题,比如本人最近写的一个导入导出的工具库Magicodes.IE(GitHub:https://github.com/xin ...
- 一个C#开发编写Java框架的心路历程
前言 这一篇絮絮叨叨,逻辑不太清晰的编写Java框架的的一个过程,主要描述我作为一个java初学者,在编写Java框架时的一些心得感悟. 因为我是C#的开发者,所以,在编写Java框架时,或多或少会带 ...
- 自己动手编写IOC框架(一)
博客创建了2年多了,一直没敢写点东西,怕技术不够误导了别人.2年多后的今天我已经很有信心能够为需要帮助的人做点微薄的贡献了.这是我第一次写博客,先自我介绍一下.本人网名泪滴,一个非常伤心的名字,生活中 ...
- ALSA声卡08_从零编写之框架_学习笔记
1.整体框架 (1)图示((DAI(全称Digital Audio Interface)接口)) 在嵌入式系统里面,声卡驱动是ASOC,是在ALSA驱动上封装的一层,包括以下三大块 (2)程序框架 m ...
- 手把手编写PHP框架 深入了解MVC运行流程
1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- 自己动手编写IOC框架(四)
终于到了激动人心的时刻了,首先感谢小伙伴们的阅读,如果能多点评论,多点探讨就更好了,没有交流让我觉得我写的东西只有标题有点价值,内容只是在浪费大家的时间.为了泪滴下周能写下一个框架orm,请小伙伴们能 ...
- 自己动手编写IOC框架(三)
刚写博客浏览量第一天就有1000多人次,给了我很大的鼓舞决定熬夜再写一篇.对于前两篇来说无非就是使用dtd验证xml,然后解析xml,和IOC的核心还是差的很远,相信很多小伙伴们都感觉看得不过瘾了,这 ...
随机推荐
- JAVA安装,环境变量配置
JAVA环境变量设置 PATH %JAVA_HOME%\bin JAVA_HOME D:\ProgramFiles\Java\jdk1.6.0_10 CLASSPATH .;%JAVA_HOME%\l ...
- MapKit 添加大头针
#import "ViewController.h" #import <MapKit/MapKit.h> #import "MYAnnotation.h&qu ...
- Liferay 6.2 改造系列之十六:关闭OpenID模式的单点登录
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Set this to true to enable OpenId au ...
- 用js完成毫秒格式数据的日期格式化任务
后台传过来的数据 creationTime 在后台是Date类型的 毫秒转换成 05-24 月 日格式的 //获得月日得到日期oTime function getMoth(str){ var ...
- vim使用01
安装与基础配置 iTerm快捷操作 清屏: <C l>/<W k> 剪切: <W x> 复制: <W v> 新增窗口: <W d> 切换窗口 ...
- loopback 03
使用微信开发前准备 微信公众开发者平台 注册开发者账号获取权限: 安装包: wechat, wechat-oauth 微信公众平台操作 登录之后,得到appID和appsecret 根据appID和a ...
- vs 颜色设置
工具-选项-字体和颜色:在项背景点击自定义-色调85 饱和度123 亮度205, 字体则是选择Calibri,个人认为看起来非常舒服.前景字体我选择了偏紫色,会很搭配背景浅绿色以及不会和关键字颜色搞混 ...
- Java API 实现HBase的数据添加与过滤查询
包依赖比较麻烦,找了好久,我用的CDH5.0 现将所依赖的包的列表清单如下: public class EmployeeDao { /** * @param args */ public static ...
- time元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javaScript怪癖分析
最近了解到javascript中有些编程怪癖现象,很有意思,有必要总结一下: 1.未知变量名创建全局变量 在我们平常的编写javascript程序的时候,有的人写法不是很正规,在定义变量的时候 直接定 ...