商城框架搭建准备工作:
报错级别:开发状态 上线状态
路径信息的初始化:init.php
运行日志:log.class.php
----------运行中的错误信息 sql信息记录下来,文件操作
-----------日志按天生成目录存放 目录创建
数据库类: db.class.php mysql.class.php
读取配置文件:
-----------------------
魔术引号:
参数过滤: GET/POST 递归
get_magic_quotes_gpc() 获取当前 magic_quotes_gpc 的配置选项设置
addslashes — 使用反斜线引用字符串
magic_quotes_sybase 被设置成 on 时,意味着插入 ‘ 时将使用 ‘ 进行转义。
PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on, 实际上所有的 GET、POST 和 COOKIE 数据都用被 addslashes() 了。
不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes() ,因为这样会导致双层转义。
可以使用函数 get_magic_quotes_gpc() 进行检测。
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
出现错误!
启动的规则: Index.php -------init.php ----------计算ROOT及根目录 ----------定义调试模式 -----------引入最基础的类:db.class.php conf.class.php ------------递归过滤参数 -------------日志记录功能 Config类:$conf对象----》config.inc.php配置文件 $_CFG=array(host=>’’,user=’’,pwd=’’) ------------读取$_CFG,数据放到$data属性 |
File:init.php 文件作用:框架初始化
-----------用递归的方式,过滤$_POST $_GET $_COOKIE
------------设置报错级别
-------------------
<?php /**** 框架的初始化 过滤参数,用递归的方式过滤$_GET、$_POST和$_COOKIE 设置报错级别, ****/ define("DEBUG", true); //设置报错级别 if (defined("DEBUG")) { error_reporting(E_ALL); } else { error_reporting(0); } //初始化绝对路径 //换成正斜线,win和linux都支持正斜线,linux不支持反斜线 //__FILE__文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 //echo __FILE__; //echo substr (str_replace(‘\\‘, ‘/‘, __FILE__),0,-8); //也可以使用__DIR__不过版本比较高,5.3以后版本才出现 //dirname — 返回路径中的目录部分 //路径算好后,使用常量保存,无论在何处引用,获取的值都一样 define("ROOT", dirname(dirname(str_replace(‘\\‘, ‘/‘, __FILE__))."/"));//定义网站根目录 //将其他需要引入的文件引入 require(ROOT."config.inc.php"); //require(ROOT."db.class.php"); require(ROOT."config.class.php"); require(ROOT."log.class.php"); ?> |
在首页测试:
/**** 所有用户访问的页面都要先加载init.php ****/ require("./include/init.php"); $conf = conf::getIns(); //动态读取选项 echo $conf->host."<br />"; echo $conf->user."<br/>"; //动态追加选项 $conf->template_dir = "D:/www/smarty"; echo $conf->template_dir; |
---------------------------设置DEBUG全局变量,如果设置为上线环境,报错级别最低,否则生产环境报所有错误
File:db.class.php 作用:数据库类
-------------采用那种数据库,先不确定
<?php /**** 数据库类 采用什么数据库,都可以 ****/ abstract class db{ /* 连接服务器 param $h 服务器地址 param $u 用户名 param $p 密码 return bool */ public abstract function connect($h,$u,$p){ } /* 发送查询 param $sql 发送查询语句 return mixed bool/resource 返回混合的类型,资源 */ public abstract function query($sql){ } /* 查询多行数据 param $sql select语句 return array/bool */ public abstract function getAll(){} /* 查询单行数据 param $sql select语句 return array/bool */ public abstract function getRow(){} /* 查询单个数据 param $sql select语句 return array/bool */ public abstract function getOne(){} /* 自动拼接insert/update语句 param $table 表名 param $data return array/bool Insert into user(username,email) values(‘zhangsan’,’zhangsan@163.com’); autoExecute(‘user’,array(‘username’=>’zhangsan’,’email’=>’zhangsan@163.com’),’insert’) Where 条件是update使用的,删除也要使用 */ public abstract function autoExcute($table,$data,$act="insert",$where=""){} } ?> |
File:mysql.class.php 作用:
File:config.inc.php 文件作用:
----------------
--------------------------------
读取配置文件,配置文件往往只放数据库信息,因此被数据库类读到就可以了
但是配置文件的信息还要包括缓存信息/smarty的目录信息,就得要求多个类都可以读到
不能每个类都include引入
解决问题:多个类读取config.inc.php,使用config.class.php读取,
由config类统一把配置信息读取出来,所有类再需要配置信息,
都从config类读取,达到只需读取一次的目的
多个类来读取,需要保持读取结果一致性
File:config.class.php 配置文件操作类
class conf{ protected static $ins = null; protected $data = array();// //将构造方法封死,不让继承 final protected function __construct(){ //引入配置文件,需要注意路径问题 include(ROOT."config.inc.php"); //一次性把配置文件信息读取进来,以后不需再获取 //赋值给data属性,在需要获取配置信息,直接从data属性获取 $this->data = $_CFG; } final protected function __clone(){ } //self关键字:不指向任何已经实例化的对象, //一般用于指向类中的静态变量 //单例模式: public static function getIns(){ //instanceof检查类和对象之间的关系 if (self::$ins instanceof self) {//如果$ins是自身的一个实例 return self::$ins;//返回自身实例 } else { self::$ins = new self();//不是就造一个自身对象 return self::$ins; } } } |
测试:config.class.php
$conf = conf::getIns(); //print_r($conf); /* conf Object ( [data:protected] => Array ( [host] => localhost [user] => root [pwd] => ) )*/ |
已经可以把配置文件信息读取到自身的data属性存储起来
更改配置文件操作类,可以读取某个选项的值
$data是保护权限,外界不可直接读取
利用魔术方法get和set,动态读取或更改信息
class conf{ protected static $ins = null; protected $data = array();// //将构造方法封死,不让继承 final protected function __construct(){ //引入配置文件,需要注意路径问题 include(ROOT."config.inc.php"); //一次性把配置文件信息读取进来,以后不需再获取 //赋值给data属性,在需要获取配置信息,直接从data属性获取 $this->data = $_CFG; } final protected function __clone(){ } //self关键字:不指向任何已经实例化的对象, //一般用于指向类中的静态变量 //单例模式: public static function getIns(){ //instanceof检查类和对象之间的关系 if (self::$ins instanceof self) {//如果$ins是自身的一个实例 return self::$ins;//返回自身实例 } else { self::$ins = new self();//不是就造一个自身对象 return self::$ins; } } //用魔术方法读取data内的信息 public function __get($key){ //array_key_exists — 检查给定的键名或索引是否存在于数组中 //boolarray_key_exists ( mixed $key , array $search ) if (array_key_exists($key, $this->data)) {//判断在数组内,存在则返回 return $this->data[$key]; } else { return null; } } //用魔术方法,在运行期,动态增加或改变配置选项 public function __set($key,$value){ $this->data[$key] = $value; } // } |
继续测试:
$conf = conf::getIns(); /*//动态读取选项 echo $conf->host."<br />"; echo $conf->user."<br/>"; //动态追加选项 $conf->template_dir = "D:/www/smarty"; echo $conf->template_dir;*/ |
本文出自 “杜国栋个人PHP学习博文” 博客,请务必保留此出处http://duguodong.blog.51cto.com/7667978/1386380
时间:2014年3月26日商城准备和框架搭建第一版,布布扣,bubuko.com
原文:http://duguodong.blog.51cto.com/7667978/1386380