PHP面向对象留言板(二)前后端分离,Model实现了实体类与表绑定
实现了实体类的自动加载,只需在model实例化时传入一个实体类名,即可实现实体类与数据库表的绑定使用对象容器,在查询出结果集之后,直接生成对象并放入对象容器取实体类数据时,会返回一个对象容器,遍历转换成对象数组并进行json编码,打印到页面就成了API界面使用css绘制按钮,输入框使用数据库配置文件前后端分离model中不应该定义数据库相关的变量和操作效果:源码目录结构:Mod
·
- 实现了实体类的自动加载,只需在model实例化时传入一个实体类名,即可实现实体类与数据库表的绑定
- 使用对象容器,在查询出结果集之后,直接生成对象并放入对象容器
- 取实体类数据时,会返回一个对象容器,遍历转换成对象数组并进行json编码,打印到页面就成了API
- 界面使用css绘制按钮,输入框
- 使用数据库配置文件
- 前后端分离
- model中不应该定义数据库相关的变量和操作
code:
https://code.csdn.net/u012995856/oop_liuyanban/tree/master
效果:
源码目录结构:
Model.php
<?php
/**
*模型类,介于实体类与数据库表之间的存在,是拥有数据的实体类集合
*
*/
require 'DB.php';
class Model
{
private $obj;
private static $entity_name;
private $db;
private $container;
//构造方法
//根据实例化Model时的传入参数
//自动加载实体类,并实例化
function __construct($entity){
$this->entity_name = $entity;//暂存实体类类名
$this->db = new DB;
set_include_path('./');//设置自动加载目录
spl_autoload_register();//自动加载
$this->obj = new $entity;//实例化实体类
}
//根据模型自动查询数据,将结果集对象化到容器,返回对象容器
public function get_all(){
$sql = 'select * from '.$this->entity_name;
$result = $this->db->query($sql);
$container = new SplObjectStorage();//实例化对象容器
while ($entity_obj = $result->fetch_object()) {
$container->attach($entity_obj);
}
return $container;
}
}
DB.conf.php
<?php
//定义数据库配置
define('HOST', 'localhost');
define('PORT', '3306');
define('USER', 'root');
define('PASSWORD', '123456');
define('DB_NAME', 'liuyanban');
DB.php
<?php
/**
*数据库类
*提供基础的数据库操作
*/
require 'DB.conf.php';
class DB
{
//定义数据库变量
private static $host = HOST;
private static $port = PORT;
private static $db_name = DB_NAME;
private static $user_name = USER;
private static $user_password = PASSWORD;
private $mysqli;
private $result;
//构造方法,用于实例化数据库对象时创建一个数据库连接
function __construct(){
$this->mysqli = new mysqli(
HOST,
USER,
PASSWORD,
DB_NAME
);
if ($this->mysqli->connect_error) {
die('database connect error!');
}
//析构方法,用于实例销毁时关闭数据库连接
function __desstruct(){
$this->mysqli->close();
$this->result->close();
}
//设置编码集
$this->mysqli->query('set names utf8');
}
//查询方法
public function query($sql){
$this->result = $this->mysqli->query($sql);
return $this->result;
}
//
public function get_one($table,$key,$value){
}
public function get_some(){
}
public function get_all_objs($value='')
{
# code...
}
public function get_all_arr($value='')
{
# code...
}
//根据单个条件进行查询
public function get_all_by_condition($value=''){
# code...
}
//根据符合条件进行查询
public function get_all_by_conditions($value=''){
# code...
}
}
getdata.php
<?php
require 'Model.php';
/**
*获取留言板数据,类似于Controller
*
*/
$model = new Model('liuyanban');
$container = $model->get_all();
$arr = array();
$container->rewind();
while ($container->valid()) {
$arr[] = $container->current();
$container->next();
}
//var_dump($arr);
echo json_encode($arr);
LiuYanBan.php
<?php
/**
*
*/
class liuyanban
{
//成员变量
//对应数据库表的字段
private static $lyb_id;
private static $lyb_title;
private static $lyb_content;
private static $lyb_author;
private static $lyb_time;
private static $lyb_authoremail;
private static $lyb_pass;
//构造方法
function __construct(){
//echo '创建了一个留言板<br>';
}
}
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>留言板</title>
<link rel="stylesheet" href="index.css" media="screen" title="no title" charset="utf-8">
<script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
<div class="lyb">
<h1>留言板 </h1>
<div class="lyb-add">
<input name="name" />
<button type="button" name="button">留言</button>
</div>
<br><br>
<div class="lyb-list" id="lyb-list">
</div>
</div>
</body>
<script type="text/javascript">
$(function(){
$.get("http://localhost/liuyanban/getlybdata.php",function(data,status) {
// var lyb = $.parsejson(data);
var objs = eval(data);
var content = '<table>';
$.each(objs,function(i,item) {
content += '<tr><th>'+item.lyb_title+' '+item.lyb_author+'<br><br>'+item.lyb_content+'<br>'+item.lyb_authoremail+'<br><br><hr></th></tr>';
});
content+='</table>';
$('#lyb-list').html(content);
});
}
);
</script>
</html>
index.css
.lyb .lyb-add button{
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 5px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
border-radius: 8px;
}
.lyb .lyb-add input{
background: #fff; border: 1px solid #000;
padding: 5px;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
}
.lyb{
text-align: center;
}
.lyb .lyb-list table{
text-align: center;
margin:auto;
}
liuyanban.sql
-- phpMyAdmin SQL Dump
-- version phpStudy 2014
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2016 广08 朿22 旿20:54
-- 服务器版本: 5.5.47
-- PHP 版本: 5.5.30
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- 数据库: `liuyanban`
--
-- --------------------------------------------------------
--
-- 表的结构 `liuyanban`
--
CREATE TABLE IF NOT EXISTS `liuyanban` (
`lyb_id` varchar(255) NOT NULL,
`lyb_title` varchar(255) NOT NULL,
`lyb_content` varchar(255) NOT NULL,
`lyb_author` varchar(50) NOT NULL,
`lyb_time` varchar(255) NOT NULL,
`lyb_authoremail` varchar(50) NOT NULL,
`lyb_pass` int(11) NOT NULL,
UNIQUE KEY `lyb_id` (`lyb_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- 转存表中的数据 `liuyanban`
--
INSERT INTO `liuyanban` (`lyb_id`, `lyb_title`, `lyb_content`, `lyb_author`, `lyb_time`, `lyb_authoremail`, `lyb_pass`) VALUES
('c4ca4238a0b923820dcc509a6f75849b', '我的第一条留言', '留言的内容', 'pangPython', '12333112', 'pangpython@qq.com', 0),
('c81e728d9d4c2f636f067f89cc14862c', 'php面向对象留言板', '这是一个面向对象的留言板程序。。。。', 'pangPython', '8987879456', 'pangPython@qq.com', 1);
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
前端可以使用一些框架,或者jquery 的数据表格json数据绑定更方便
更多推荐



所有评论(0)