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;
php框架练习的更多相关文章
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 旺财速啃H5框架之Bootstrap(五)
在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- 制作类似ThinkPHP框架中的PATHINFO模式功能
一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...
- 旺财速啃H5框架之Bootstrap(四)
上一篇<<旺财速啃H5框架之Bootstrap(三)>>已经把导航做了,接下来搭建内容框架.... 对于不规整的网页,要做成自适应就有点玩大了.... 例如下面这种版式的页面. ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- Hibernatel框架关联映射
Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...
- [虾扯蛋] android界面框架-Window
从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等.下面就以这几个类为出发点来概览下安卓开发的"界面架构&quo ...
随机推荐
- 将cocos的app直接在我的设备上测试运行
首先,你要有一个写好了的,准备在真机上测试的cocos程序. 1.设置ARC,设置的过程在另外一篇博文上有写. 2.在Target的Build Setting里面 找到Valid Archs 删除里面 ...
- 如何高性能的给UIImageView加个圆角?(不准说layer.cornerRadius!)
豆电雨 搬砖自味精:http://awhisper.github.io/2016/03/12/滚动圆角卡顿刨根问底/ 使用Quartz2D直接绘制图片 步骤: a.创建目标大小(cropWidth, ...
- PopupWindow源码分析
PopupWindow是我们经常使用的一个控件,严格来说这个PopuWindow就用来在指定位置显示一个View. 经过分析源码,PopupWindow里面没有Window对象,只是把View设置到屏 ...
- MST(Kruskal’s Minimum Spanning Tree Algorithm)
You may refer to the main idea of MST in graph theory. http://en.wikipedia.org/wiki/Minimum_spanning ...
- 【解决方法】VS 丢失模板
今天要用VS2008做一个报表,可是在添加新建项的时候却没有报表(rdlc)模板. 解决方法: 1 拷贝文件 1.1 32位windows 将 C:\Program Files\Microsoft V ...
- jquery做个日期选择适用于手机端
第一步:做个 文本框用于显示年月日的 第二步:点击文本框触发bootstrap模态框并显示 第三步:我是建一个外部js页面写的 js中获得当前时间是年份和月份,形如:201208 //获取 ...
- UISegmentedControl UISlider
self.view.backgroundColor = [UIColor whiteColor]; //UISegmentedControl 是iOS中的分段控件,事实上是多个button的组合视图, ...
- HDU 2069 Coin Change
Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- oracle中 sql%rowcount 使用方法
sql%rowcount用于记录改动的条数,必须放在一个更新或者删除等改动类语句后面运行,select语句用于查询的话无法使用, 当你运行多条改动语句时,依照sql%rowcount 之前运行的最后一 ...
- Writing Your First Test
Let's say you have an activity layout that represents a welcome screen: <?xml version="1.0&q ...