PHP面向对象留言板(二)前后端分离,Model实现了实体类与表绑定

来源:互联网 发布:反向代理服务器nginx 编辑:程序博客网 时间:2024/05/03 20:34
  • 实现了实体类的自动加载,只需在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

<?phprequire '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.30SET 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数据绑定更方便

1 0
原创粉丝点击