用PHP写一个简单的MVC实例

2023-05-20 14:41:17 浏览数 (1)

MVC是一种人为划分应用开发流程的方式,使开发工作更加高效;

它有三个部分:模型(Model)、视图(View)、控制器(Controller)

传统WEB开发

传统WEB开发将数据处理与展示写在一起,视图直接从模型获取数据并显示,代码复杂,维护困难,不利于团队分工,开发效率低。如果业务逻辑不复杂,通常一个PHP文件就能搞定。

代码语言:javascript复制
<?php
// json数据

// 如果json数据为一个文件可以如下引用
// 读取 data.json 文件中的内容为一个字符串
// $json = file_get_contents('data.json');
$json = '[
  {
    "id": "1",
    "navname": "岳泽以",
    "navlink": "https://www.yuezeyi.com/",
    "xuhao": "3"
  },
  {
    "id": "2",
    "navname": "百度",
    "navlink": "https://www.baidu.com/",
    "xuhao": "2"
  },
  {
    "id": "3",
    "navname": "腾讯",
    "navlink": "https://www.baidu.com/",
    "xuhao": "1"
  }
]';
// 将json数据转为数组或对象
$data = json_decode($json, true);
?>

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <h3 style="text-align: center;">导航列表</h3>
  <table border="1" cellspacing="0" width="50%" align="center">
    <tr>
      <th>id</th>
      <th>navname</th>
      <th>navlink</th>
      <th>xuhao</th>
    </tr>
    <?php foreach ($data as $value) : ?>
      <tr>
        <td><?php echo $value['id'] ?></td>
        <td><?php echo $value['navname'] ?></td>
        <td><?php echo $value['navlink'] ?></td>
        <td><?php echo $value['xuhao'] ?></td>
      </tr>
    <?php endforeach ?>
  </table>
</body>

</html>

MVC模式开发

MVC就是各写各的,模型负责数据处理,而视图负责数据显示,具体流程如下:

  1. 创建一个模型,生成并返回一组数据;
  2. 创建一个视图,展示模型生成的数据;
  3. 创建一个控制器,将模型与视图整合;
  4. 创建一个入口文件,调用控制器完成操作;

创建模型文件(Model)

创建一个模型Model类,在类中创建getData()方法,这个方法会返回数据。

代码语言:javascript复制
<?php
class Model
{
  public function getData()
  {
    // 读取一个数据
    $json = file_get_contents('data.json');
    // 将json数据转为数组或对象
    $data = json_decode($json, true);
    // 返回数据
    return $data;
  }
}

创建视图文件(View)

创建View类,在类中创建display()方法,这个方法将数据以HTML方式显示。

代码语言:javascript复制
<?php
class View
{
  public function display($data)
  {
    // 这里做一个表格来显示数据
    $table = ' <h3 style="text-align: center;">导航列表</h3>';
    $table .= '<table border="1" cellspacing="0" width="50%" align="center">
    <tr>
      <th>id</th>
      <th>navname</th>
      <th>navlink</th>
      <th>xuhao</th>
    </tr>';
    foreach ($data as $value) {
      $table .= '<tr>';
      $table .= '<td>' . $value['id'] . '</td>';
      $table .= '<td>' . $value['navname'] . '</td>';
      $table .= '<td>' . $value['navlink'] . '</td>';
      $table .= '<td>' . $value['xuhao'] . '</td>';
      $table .= '</tr>';
    }
    $table .= '</table>';
    // 返回这个表格
    return $table;
  }
}

创建控制器文件(Controller)

创建Controller类,在类中创建show()方法,由该方法完成模型与视图的调用。

代码语言:javascript复制
<?php
class Controller
{
  public function show()
  {
    // 在model获取到数据
    $data = Model::getData(); //调用Model类中静态方法getDdata
    // 将数据传给view显示
    echo View::display($data); //调用View类静态方法display()显示数据
  }
}

创建入口文件(index.php)

入口文件的功能是完成类入件引入和控制器的调用。

代码语言:javascript复制
<?php
require_once('Model.php'); //引入模型类
require_once('View.php');  //引入视图
require_once('Controller.php'); //引入控制器类

// 调用控制器中的show方法显示数据,写死了
// Controller::show();
//设置如果默认的控制器和类方法
$c = isset($_GEt['c']) ? $_GET['c'] : 'Controller'; //获取URL参数c=>控制器类名
$f = isset($_GET['f']) ? $_GET['f'] : 'show'; //获取URL参数a=>控制器类中的方法名

$controller = new $c; //实例化控制器,获取控制器对象$controller
$controller->$f(); //调用控制器中的show()方法

此时,访问你的地址/index.php则会默认展示自己设置的控制器中的方法,如果访问以下地址:

/index.php?c=controller&f=show

则会访问Controller控制器中的show方法

0 人点赞