• 实现了实体类的自动加载,只需在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数据绑定更方便

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐