PHP之MVC比较典型的基础演示

MVC(模型,视图,对照)总而言之即逻辑与数据相分离,把数据部分和前台显示部分分离开来,而每个模块又有着自己的任务部分,多人编程的情况下各自负责各自的部分,项目完工时直接合并就可以了。MVC思想如下图:

最简单的代码逻辑演示如下:

如图1所示,数据库工具操作类,用来操作数据库。此类可以实现数据库的连接,和数据库的操作等封装方法。(这个文件在我本地的路径是类里面的,如果直接拷贝的时候注意路径问题)

<?php
header('content-type:text/html;charset=utf-8');
error_reporting(E_ALL ^ E_DEPRECATED);

class MYSQL{

  private  $link=null;
    private $host;
    private $port;
    private $user;
    private $pass;
    private $char;
    private $db;

// 添加单例模块
private static $instance=null;



    static function GetInstance($config){  // 获取对象
        $obj=new self($config);
        if(!isset(self::$instance))
        {
            self::$instance=new self($config); //判断如果instance为空则新建一个对象 然后存到静态属性instance里面
        } return self::$instance;   //如果静态属性instance中已经有了对象则直接返回即可
    }
private function __clone(){

} // 私有化克隆方法,防止外界通过克隆手段来重新生成对象
// 单例模块结束

private  function __construct($config){  //一实例化 就会连接上这个数据库  把数组加载进来
            // 把连接过来的数据库信息保存起来,留以它用
        $this->host=!empty($config['host']) ? $config['host'] : "localhost";
        $this->port=!empty($config['port']) ? $config['port'] : "3306";
        $this->user=!empty($config['user']) ? $config['user'] : "root";
        $this->pass=!empty($config['pass']) ? $config['pass'] : "";
        $this->char=!empty($config['char']) ? $config['char'] : "utf8";
        $this->db=!empty($config['db']) ? $config['db'] : "test";


      $link=@mysql_connect("{$config['host']}:{$config['port']}","{$config['user']}","{$config['pass']}");

       $this->charset($this->char);
       $this->usedb($this->db);
  }

  function charset($charset){  // 设置字符编码
    mysql_query("set names {$charset} ");
  }

  function usedb($db){  //更改要使用的数据库
     mysql_query("use {$db}");
     echo "已切换数据库 {$db} <br>";
  }

  function closeDB(){  //关闭数据库
      mysql_close($this->link);
      echo "已关闭数据库连接";
  }

  function exec($sql){ // 返回增,删,改语句的返回值为真假boolen
       $result=$this->query($sql);
       return true; //因为是增删改语句,所以直接返回true就行了
  }

  function getOneRow($sql){  //执行一条返回一行数据的语句,返回一维数组
 $result =$this->query($sql); // 一行代替几行代码
  $arr=mysql_fetch_assoc($result);
  mysql_free_result($result);// 提前释放连接资源 释放内存空间(销毁结果集),否则等到页面结束才自动销毁  这是PHP语言的一个优势
  return $arr;
  }

  function getRows($sql){ // 执行一条返回多行数据的语句,返回二维数组
    // $result = mysql_query($sql);
     $result=$this->query($sql);

  $array=array();
  while ($arr=mysql_fetch_assoc($result)) {
      # code...
      $array[]=$arr; // 此时就为二维数组了
  }

  return $array;

  }

  function getOnedata($sql){ //执行一条返回一个数据的语句,返回一个直接值
     $result=$this->query($sql);// 一行代替上面几行

    $arr=mysql_fetch_row($result);
    $data=$arr[0];  // 因为只取出一行,所以直接取出索引为0的数组即可了
    return $data;

  }

  function query($sql){  // 仅仅用于执行sql语句,然后直接返回sql执行的结果
   $result=mysql_query($sql);
    if($result===false){
        echo "数据执行失败";
        echo "请参考如下信息:".mysql_error();
        die();
    }echo "数据执行成功";
    return $result;
  }

}


 ?>

2,模型类。用以提取数据库中的数据。这里我的数据库用的是测试,密码是空,在数据库中自己可以设置 .showInfo()和showUsers()方法是模型类的方法,在控制器类文件里调用这两个方法来:.MYSQL ::的GetInstance()这个方法是调用的数据库类生产,以上在类文件中已做静态化处理仅仅的英文个类文件,单独访问不会有结果,需载入控制器类文件中。

总结:

模型类不能直接请求,只能“被载入”而发挥作用。

通常都是根据“控制器的要求”,以返回合适的数据;

它的核心工作只有一个:

(根据控制器的要求)去生产数据;

<?php
// 模型类主要用于操作提供数据
require './class/MYSQL.class.php';
class model { // 此类实现数据库的简单查询操作
   private   $config=array(
        'host'=>"localhost",
    'port'=>3306,
    'user'=>"root",
    'pass'=>'',  // 自己的数据库密码
    'char'=>"utf8",  // 自己的数据库编码
    'db'=>"test"  //自己的数据库名字
    );  

     function showInfo(){  // 用来显示所有数据

        $sql="select * from stu;";
        $obj=MYSQL::GetInstance($this->config);
        $data=$obj->getRows($sql);  // 返回值为父类的 方法的 返回值   是个数组
        return $data;
    }

   function showUsers(){  // 返回总共有多少条记录
        $sql="select count(*) from stu;";
        $obj=MYSQL::GetInstance($this->config);
        $data=$obj->getOnedata($sql);  
        return $data;  
    }


}

3,控制器类,用以给浏览器请求,然后决定用哪里的数据显示到(test_model.html)上。

    忘记不要了需要加载模型类文件视图状语从句:层视图文件。

总结:

控制器类由浏览器直接请求(访问)

 它需要做2件最核心的工作:

1,(根据请求),决定需要什么数据,并去调用模型文件(类),去获取该数据;

2,(根据请求),决定需要将数据显示在哪个视图文件中。

<?php
require '模型类文件';

$obj=new model();

$users_info=$obj->showInfo();
$users=$obj->showUsers();

include './test_model.html';  //加载当前文件下的test_model.html视图层文件

?>

如图4所示,视图层文件。仅用来显示PHP数据填充后的样子,单独访问不会有结果。

总结:

View,是一个“伪html文件”(因为其中有极简单的php代码),它也不应由浏览器直接请求;

它的作用是:

结合html和css代码,显示相应的变量(数据)。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
view层出来了,数据如下:
   <br>

<table border="1">

    <?php
  //  echo var_dump($users_info);
 //   echo var_dump($users);
    foreach($users_info as $value){
   ?>
    <tr>
        <td><?php echo $value['id']; ?>  </td>
        <td><?php echo $value['name']; ?> </td>
        <td> <?php echo $value['gender']; ?></td>
    </tr>
<?php } ?>

</table>
    总人数有:<?php echo $users; ?> 个人    </body>

</html>

代码执行后如下,以上文件可以直接拷贝运行,但是请注意更改为自己的路径

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值