1.JSON方式封装通信接口:
封装: response.php
$code, 'message' => $message, 'data' => $data ); // 通过json_encode(),产生json数据 echo json_encode($result); // exit 终止程序且不输出 exit; }}?>
调用:test.php
1, 'name' => 'zhangsan');// 调用类文件中的json()方法Response::json(200,'数据返回成功',$arr);?>
2.XML方式封装通信接口
2.0.1 PHP生成xml数据
封装: response.php
public static function xml(){ // header 发送一个http头信息,将类型改为"text/xml",用于暴露xml节点 header("Content-Type:text/xml"); // 生成xml数据(通过字符串拼接的方法,首先定义一个变量$xml,存储xml数据) // \n 用于换行 $xml = " \n"; // 头信息 $xml .= "\n"; // 根节点 $xml .= " "; // 输出拼接后的xml数据 echo $xml; }200
\n"; // 主体1 $xml .= "数据返回成功 \n"; // 主体2 $xml .= " \n"; // 主体3 $xml .= "1 \n"; $xml .= "zhangsan \n"; $xml .= "\n"; $xml .= "
2.0.2 xml方式封装通信数据接口
封装: response.php
$code, 'message' => $message, 'data' => $data ); // 生成xml数据 // 发送header头信息,用于暴露xml节点 header("Content-Type:text/xml"); // 定义变量$xml,用于存储拼接后的xml数据 $xml = " \n"; // 头信息 $xml .= "\n"; // 根节点 // 使用xmlToEncode()方法解析$result $xml .= self::xmlToEncode($result); $xml .= " "; // 输出拼接后的xml数据 echo $xml; } // 将$result拼接成新的xml数据 // 参数:$data(新的数据),例如:$result public static function xmlToEncode($data){ // 解析$result // 定义变量$xml存储数据 $xml = ""; // 初始化 $attr,当$key不为数字时,$attr为空 $attr = ""; // foreach循环遍历$data数组 foreach ($data as $key => $value) { // 判断$key为数字的情况 if(is_numeric($key)){ // 添加属性 $attr = "id='{$key}'"; $key = "item"; } // $key是一个节点,$value是节点的一个数据,使用{}用于识别变量 $xml .= "<{$key}{$attr}>\n"; // 开始标签 // $value是数组,使用递归,循环输出(判断是否为数组,如果是,则再次调用xmlToEncode方法) // 在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self:: ,通过is_array()判断$value是否为数组 $xml .= is_array($value) ? self::xmlToEncode($value):$value; // 节点的数据 $xml .= " \n"; // 结束标签 } // 循环结束后,输出这一块组装好的xml数据 return $xml; }}// 调用Response类的方法$data = array( 'id' => 1, 'name' => 'zhangsan');Response::xmlEncode(200,'success',$data);?>
3.综合方式封装通讯接口:
封装: response.php
$code, 'message' => $message, 'data' => $data ); // 如果数据类型为json if($type == 'json'){ // 调用json()方法 self::json($code,$message,$data); exit; }elseif($type == 'array') { // 如果数据类型为array(调试模式) // 直接输出$result var_dump($result); }elseif($type == 'xml') { // 如果数据类型为xml // 调用xmlEncode()方法 self::xmlEncode($code,$message,$data); exit; }else{ // 其他类型 } } // JSON方式封装通信接口 // 定义一个静态方法,作用:按json方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组) // 注释码: /** * 按json方式输出通信数据 * @param integer(数字类型) $code 状态码 * @param string(字符串类型) $message 提示信息 * @param array(数组类型) $data 数据 * return(返回值) string(字符串类型) */ public static function json($code,$message = '',$data = array()){ // 判断$code是否为数字 if(!is_numeric($code)){ return ''; } //将三个参数组装成一个新的数组 $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); // 通过json_encode(),产生json数据 echo json_encode($result); // exit 终止程序且不输出 exit; } // xml方式封装通信接口 // 定义一个静态方法,作用:按xml方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组) // 注释码: /** * 按xml方式输出通信数据 * @param integer(数字类型) $code 状态码 * @param string(字符串类型) $message 提示信息 * @param array(数组类型) $data 数据 * return(返回值) string(字符串类型) */ public static function xmlEncode($code,$message,$data = array()){ // 判断$code是否为数字 if(!is_numeric($code)){ return ''; } //将三个参数组装成一个新的数组 $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); // 生成xml数据 // 发送header头信息,用于暴露xml节点 header("Content-Type:text/xml"); // 定义变量$xml,用于存储拼接后的xml数据 $xml = " \n"; // 头信息 $xml .= "\n"; // 根节点 // 使用xmlToEncode()方法解析$result $xml .= self::xmlToEncode($result); $xml .= " "; // 输出拼接后的xml数据 echo $xml; } // 将$result拼接成新的xml数据 // 参数:$data(新的数据),例如:$result public static function xmlToEncode($data){ // 解析$result // 定义变量$xml存储数据 $xml = ""; // 初始化 $attr,当$key不为数字时,$attr为空 $attr = ""; // foreach循环遍历$data数组 foreach ($data as $key => $value) { // 判断$key为数字的情况 if(is_numeric($key)){ // 添加属性 $attr = "id='{$key}'"; $key = "item"; } // $key是一个节点,$value是节点的一个数据,使用{}用于识别变量 $xml .= "<{$key}{$attr}>\n"; // 开始标签 // $value是数组,使用递归,循环输出(判断是否为数组,如果是,则再次调用xmlToEncode方法) // 在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self:: ,通过is_array()方法判断$value是否为数组 $xml .= is_array($value) ? self::xmlToEncode($value):$value; // 节点的数据 $xml .= " \n"; // 结束标签 } // 循环结束后,输出这一块组装好的xml数据 return $xml; }}// 调用Response类的方法$data = array( 'id' => 1, 'name' => 'zhangsan');Response::xmlEncode(200,'success',$data);?>
调用:test.php
1, 'name' => 'zhangsan', 'type' => array(4,5,6), 'test' => array(1,45,67=>array(123,'tsysa')));// 调用类文件中的show()方法Response::show(200,'数据返回成功',$data,'json');?>
4.将数据缓存值指定文件中:
封装:file.php
_dir = dirname(__FILE__).'/files/'; } // 将获取缓存,生成缓存,删除缓存 封装在一个方法中 // 参数一:缓存文件的文件名,参数二:缓存数据(默认值为空),参数三:保存缓存的文件路径(默认值为空) public function cacheData($key,$value = '',$path = ''){ // 拼装成一个文件 $filename = $this->_dir.$path.$key.self::EXT; // 判断$values是否存在 if($value!==''){// 将value值写入缓存 // 判断$value是否为null,为null则删除缓存 if(is_null($value)){ // unlink() 删除缓存 return @unlink($filename); } // 获取文件目录 $dir = dirname($filename); // 判断目录是否存在,即判断存储缓存的文件是否存在,如果不存在,则创建缓存文件 if(!is_dir($dir)){ // 创建目录,参数一:文件目录名,参数二:设置权限 mkdir($dir,0777); } // 将缓存数据写入文件 // 参数一:缓存文件名,参数二:缓存数据(只能是字符串的形式,通过json_encode()转换) return file_put_contents($filename,json_encode($value)); } // 判断$filename是否存在 if(!is_file($filename)){ return FALSE; }else{ // file_get_contents()获取缓存值 // json_decode()将json 转换为数组形式 return json_decode(file_get_contents($filename),true); // 传入true返回原值 } }}?>
调用:test.php
1, 'name' => 'zhangsan', 'type' => array(4,5,6), 'test' => array(1,45,67=>array(123,'tsysa')));// new一个File类$file = new File();// 调用cacheData()方法$file->cacheData('index_mk_cache',$data);// 添加缓存if($file->cacheData('index_mk_cache',$data)){ echo "success";}else{ echo "error";}// 获取缓存if($file->cacheData('index_mk_cache'){ var_dump($file->cacheData('index_mk_cache')); exit; echo "success";}else{ echo "error";}// 删除缓存if($file->cacheData('index_mk_cache',null)){ echo "success";}else{ echo "error";}?>
.
// 开始封装:
通用:db.php
'127.0.0.1', // 数据库地址 'user' => 'root', // 用户名 'password' => '', // 密码 'database' => 'video', // 数据库名 ); // 定义资源标识符(结果集) static private $_connectSource; // 用于一个保存类的实例的静态成员变量 $_instance // 使用静态私有变量保存类的实例 static private $_instance; // __construct() 构造函数,函数执行时默认执行,一般用于初始化 // 单例模式规定构造函数必须是非public private function __construct(){ } // 拥有一个访问这个实例的公共的静态方法 // 定义getInstance()方法,便于在类的内部实例化类 static public function getInstance(){ // 检查类有没有被实例,如果有则返回变量 if(!(self::$_instance instanceof self)){ // 实例化类 self::$_instance = new self(); } // 返回一个类的实例 return self::$_instance; } // php连接数据库 public function connect(){ // 判断资源是否存在 if(!self::$_connectSource){ // 连接数据库// @是可以屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。这样除了用户界面会友好一些外,更重要的是安全性,因为屏蔽了出错文件的路径等信息。 self::$_connectSource = @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']); // 如果没有返回资源 if(!self::$_connectSource){ die('数据库连接失败'.mysql_error()); } // 选择数据库 // 参数一:数据库名称,参数二:资源标识符(结果集) mysql_select_db($this->_dbConfig['database'],self::$_connectSource); // 设置字符集 mysql_query("set names UTF8",self::$_connectSource); } // 返回连接数据库的资源 return self::$_connectSource; }}// 调用// 数据库的连接,返回结果集$connect = Db::getInstance()->connect();var_dump($connect);?>
方案一:读取数据库方式开发接口(直接连接数据库获取)
实例:list.php
connect();}else(Exception $e){ // 提示异常 return Response::show(403,'数据库连接失败');}// $result:资源标识符(结果集)$result = mysql_query($sql,$connect);// 定义一个空数组,用于存储数据$videos = array();// while循环输出所有的数据while($video = mysql_fetch_assoc($result)) { // 每次循环,自动生成id,且值会放入$videos数组中 $videos[] = $video;}// 使用Response类中的方法,将$videos中的数据转换为json格式// Response::show('状态码','提示语句','原始数据')if($videos){ return Response::show(200,'首页数据获取成功',$videos);}else{ return Response::show(400,'首页数据获取失败',$videos);}?>
方案二:读取缓存方式开发接口(连接数据库获取的同时缓存一份,再次获取时不再连接数据库,而是读取缓存,可设置缓存失效时间)
方案三:定时读取缓存方式开发接口(通过crontab)