php框架练习

框架的作用:

功能:操作数据库 模版引擎smarty

分析,应该具备什么功能?

a:具体配置文件 ,配置文件的读取功能
b:数据库处理类
c:目录结构

先建一个includes文件放入,配置文件(config.php),配置类(conf.class.php),mysql数据库处理类(mysql.class.php),网站初始化文件(init.php)

config.php  文件:

//网站的配置文件

$_cfg=array();

$_cfg[‘host‘]=‘localhost‘;
$_cfg[‘user‘]=‘root‘;
$_cfg[‘pwd‘]=‘root‘;
$_cfg[‘db‘]=‘xxzdb‘;
$_cfg[‘char‘]=‘utf8‘;
//$_cfg[‘‘]=‘‘;
//$_cfg[‘‘]=‘‘;

conf.class.php

//配置文件的读取类
//作用:读取config.php 并能返回某个配置选项的值
class Conf{
	private static $ins = false;
	private $info = array();

	final protected function __construct(){
		require(ROOT .‘includes/config.php‘);
		$this->info = $_cfg;
	} 

	//单例
	public static function getIns(){
		if(self::$ins === false){
			self::$ins = new self();

		}
		return self::$ins;

	}

	//读取配置文件的信息
	public function __get($key){
		if(array_key_exists($key,$this->info)){
		return $this->info[$key];
		} else {
		return null;
		}
	}

	public function __set($key,$value){
		$this->info[$key] = $value;

	}
	//测试方法
	public function printc(){

		print_r($this->info);
	}
}

//调用
/*
$conf = Conf::getIns();

$conf->template_dir=‘d:/www‘;
echo $conf->printc();
*/

mysql.class.php

//require(‘conf.class.php‘);
//数据库的处理类

//抽象类 没有方法体
abstract class abs_db{
	abstract protected function connect();
	abstract protected function select_db($dbname=‘‘);
	abstract protected function setChar();
	abstract protected function	query($sql);
	abstract protected function	getAll($sql);
	abstract protected function	getRow($sql);
	abstract protected function getOne($sql);
	abstract protected function error();
}	

class Mysql extends abs_db{
	private static $ins = false;
	private $conn = false;
	private $conf = false;

	protected function __construct(){

		$this->conf = Conf::getIns();
	    $this->connect();
		$this->select_db();
		$this->setChar();
	}

	public static function getIns(){
		if(self::$ins === false){
			self::$ins= new self();
		}
		return self::$ins;
	}

	//创建连接
	protected function connect(){
		$this->conn = mysql_connect($this->conf->host,$this->conf->user,$this->conf->pwd);
		if(!$this->conn){
			$err = new Exception(‘连接失败‘);
			throw $err;
		}
	}

	//选择数据库
	protected function select_db($dbname=‘‘){
		if($dbname == ‘‘){
			$sql=‘use ‘.$this->conf->db;
			$this->query($sql);
		}
	}

	//设置字符集
	protected function setChar(){
		$sql=‘set names ‘.$this->conf->char;
		$this->query($sql);
	}

	//执行sql语句
	public function query($sql){
		return mysql_query($sql,$this->conn);
	}

	//取回所有行
	public function getAll($sql){
		$rs = $this->query($sql);

		$list=array();
		while($row = mysql_fetch_assoc($rs)){
			$list[] = $row;
		}
		return $list;
	}

	//取回一行
	public function getRow($sql){
		$rs = $this->query($sql);
		return mysql_fetch_assoc($rs);
	}

	public function getOne($sql){

	}

	public function error(){
		print_r(mysql_error($this->conn));
	}

	//关闭资源
	public function __destruct(){
	}
}
/*
$db = Mysql::getIns();

print_r($db);
$sql="select * from art limit 5";
print_r($db->getAll($sql));
*/

init.php

//网站的初始化文件
/**

魔术方法
__FILE__ 当前绝对路径

文件作用:
负责当前网站的根目录
引入所以页面都需要的文件

*/

//ROOT 代表网站的跟路径
define(‘ROOT‘,str_replace(‘\\‘,‘/‘,str_replace(‘includes\init.php‘,‘‘,__FILE__)));

require(ROOT .‘includes/conf.class.php‘);
require(ROOT .‘includes/mysql.class.php‘);
//echo ROOT;
时间: 2024-08-08 13:27:11

php框架练习的相关文章

基于jquery开发的UI框架整理分析

根据调查得知,现在市场中的UI框架差不多40个左右,不知大家都习惯性的用哪个框架,现在市场中有几款UI框架稍微的成熟一些,也是大家比较喜欢的一种UI框架,那应该是jQuery,有部分UI框架都是根据jQuery研发出来的产品,现在也很常见了. 国产jQuery UI框架 (jUI) DWZ DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.设计目标是简单实用,快速开发,降低ajax开发成本. jQuery 部件布局

静态网页框架设计首次体验(文章改)

根据教材与上网成功解决了Tomcat与Myeclipse的安装,同时熟悉了Java web创建项目到部署运行整个过程.今天起正式开始学习有关Java web的编程部分.Java web静态网页(HTML网页)的标记含义.基本语法的介绍到框架设计基本模板与案例,今天的学习的内容,让网页编程有了一个初步的框架.结合自身所在协会的情况,计划制作一个关于协会的网页,已有初步想法,望通过学习不断完善和修改协会网站.根据今天所学,并参考书本30页框架设计案例对网页进行初步搭建. 具体代码如下 TW.jsp:

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

.NET深入解析LINQ框架(一:LINQ优雅的前奏)

阅读目录: 1.LINQ简述 2.LINQ优雅前奏的音符 2.1.隐式类型 (由编辑器自动根据表达式推断出对象的最终类型) 2.2.对象初始化器 (简化了对象的创建及初始化的过程) 2.3.Lambda表达式 (对匿名方法的改进,加入了委托签名的类型推断并很好的与表达式树的结合) 2.4.扩展方法 (允许在不修改类型的内部代码的情况下为类型添加独立的行为) 2.5.匿名类型 (由对象初始化器推断得出的类型,该类型在编译后自动创建) 2.6.表达式目录树(用数据结构表示程序逻辑代码) 3.LINQ

.NET深入解析LINQ框架(二:LINQ优雅的前奏)

阅读目录: 1.LINQ框架的主要设计模型 1.1.链式设计模式 (以流水线般的链接方式设计系统逻辑) 1.2.链式查询方法(逐步加工查询表达式中的每一个工作点) 2.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) 2.3.深入IEnumerable.IEnumerable<T>.Enumerable(LINQ to Object框架的入口) 2.4.深入IQueryable.IQuer

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

阅读目录: 1.开篇介绍 2.扩展Linq to Object (应用框架具有查询功能) 2.1.通过添加IEnumerable<T>对象的扩展方法 2.2.通过继承IEnumerable<T>接口 2.3.详细的对象结构图 3.实现IQueryable<T> .IQueryProvider接口 3.1.延迟加载IEnumertor<T>对象(提高系统性能) 3.2.扩展方法的扩展对象之奥秘(this IQueryable<TSource> so

.NET深入解析LINQ框架(三:LINQ优雅的前奏)

阅读目录: 1.动态LINQ查询(动态构建Expression<T>表达式树) 2.DLR动态语言运行时(基于CLR之上的动态语言运行时) 1].动态LINQ查询(动态构建Expression<T>表达式树) 什么是动态LINQ查询?LINQ的编写是静态的,因为C#是基于静态类型系统原理设计的,在编写时已经确定类型,也就是在编译时就已经知道将要执行什么样的查询,条件是什么.排序方式是什么等等.那么很大一部分应用场合中我们需要根据用户的选择来查询数据源,以往我们都是通过判断的方式来拼

Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)

前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起.问题大概有以下几点: 1.项目层的文件夹结构 2.解决MVC的Controller和Web API的Controller类名不能相同的问题 3.给MVC不同命名空间的Area的注册不同的路由 4.让Web API路由配置也支持命名空间参数 5.MVC及Web API添加身份验证及错误处理的过滤器

10大APP界面框架设计模式详解

随着移动互联网的发展,移动app已经成为了每个互联网公司的标配了,那作为产品经理,我们如何设计出更加符合用户体验的app产品呢?今天和大家分享的就是10中最常见的app界面光甲设计模式,一起来看看吧. 1.标签导航 标签导航是十大界面框架设计里最常用的界面框架设计,也是被业界之内公认的一种普遍使用的页面框架设计.那么这种页面框架设计在作业方面对一个用户来说也是最常见的一种页面框架设计,比如说微博.微信.手机百度.支付宝.淘宝,这些我们所谓的超级APP都是运用的标签导航,无一例外.从这个角度也可以

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =