controller.php 代码
<?php
namespace mvc;
require_once 'Model.php';
require_once 'View.php';
// 控制器
class Controller{
public $table = null;
//查询数据
public function index($sql,View $view){
//获取数据
$data = Db::read($sql);
// print_r($data);
//渲染模板
// $view = new View();
return $view->fetch($data);
}
//新增数据
public function add($sql,$data=[]){
Db::create($sql,$data);
}
//更新数据
public function update($sql,$data){
Db::update($sql,$data);
}
// 删除数据
public function delete($sql){
Db::delete($sql);
}
}
//客户端调用
$connectParams = [$dsn, $user, $password];
$pdo = Db::getInstance(...$connectParams);
//查询数据
$sql = 'SELECT * FROM `category` WHERE `cate_id` = 1';
$view = new View();
$controller = new Controller();
$controller->index($sql,$view);
// 新增数据
//$data = [
// 'name'=>'kh',
// 'alias'=>'科幻电影'
//];
////$model = 'category';
//$sql= 'INSERT INTO category (name,alias) VALUES (:name,:alias)';
//$controller = new Controller();
//$controller->add($sql,$data);
//更新数据
//$data = [
// 'name'=>'kj',
// 'alias'=>'抗金英雄郭靖',
//];
//$sql = 'UPDATE category SET alias = :alias, name = :name WHERE cate_id = 12';
//$controller = new Controller();
//$controller->update($sql,$data);
//// 删除数据
//$sql = 'DELETE FROM `category` WHERE `cate_id`=12';
//$controller = new Controller();
//$controller ->delete($sql);
////echo '成功更新了: ' .$db->delete($where). ' 条记录';点击 "运行实例" 按钮查看在线实例
Db.php
<?php
namespace mvc;
require_once 'config.php';
require_once 'View.php';
class Db{
private static $pdo = null;
public static function getInstance(...$connectParams){
if (is_null(self::$pdo)) {
// 因为构造函数没有返回值, 所以实例当前类并赋值给静态属性的过程,只能在构造方法中完成
// self::$pdo = new self(...$connectParams);
new self(...$connectParams);
}
return self::$pdo;
}
// 当前构造方法是私有的, 仅表示在类外部不允许调用, 但是在类的内部仍然有效的
private function __construct(...$connectParams){
// 当前$connectParams 是一个索引数组,每一个元素对应着不同的连接参数
$dsn = $connectParams[0];
$username = $connectParams[1];
$password = $connectParams[2];
// 在私有的构造方法中完成类实例的创建过程
// 创建一个PDO类实例, 并赋值给当前类实例self::$pdo
self::$pdo = new \PDO($dsn, $username, $password);
}
// 私有化克隆方法
private function __clone(){
}
// 读取多条数据
public function read($sql){
$stmt = static::$pdo->prepare($sql);
$stmt->execute();
// 返回二维数组表示的查询结果集
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
// 新增, 参数是数组: 新记录的键值对
public function create($sql,$data){
$stmt = static::$pdo->prepare($sql);
$stmt->execute($data);
echo '成功新增'.$stmt->rowCount().'条记录,最新记录的主键ID是: '.static::$pdo->lastInsertId();
}
//更新数据
public function update($sql,$data){
$stmt = static::$pdo->prepare($sql);
$stmt->execute($data);
// 返回被更新的记录数量
// return $stmt->rowCount();
echo '成功更新了: ' .$stmt->rowCount() . ' 条记录';
}
// 删除数据
public function delete($sql){
// 预处理执行删除操作
$stmt = static::$pdo->prepare($sql);
$stmt->execute();
// return $stmt->rowCount();
echo '成功删除了: ' .$stmt->rowCount(). ' 条记录';
}
}点击 "运行实例" 按钮查看在线实例
model.php 这个是引入的db类 但是好像不能继承
View.php
<?php
namespace mvc;
require_once 'Model.php';
class View{
public function fetch($data){
// print_r($data);
// foreach ($data as $v){
// echo "<li> {$v['cate_id']} {$v['name']} {$v['alias']} </li>";
// }
require_once 'index.php';
}
}点击 "运行实例" 按钮查看在线实例
index.php
<?php
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
</style>
</head>
<body>
<ul>
<?php
foreach ($data as $v){
echo "<li><a href=''>{$v['cate_id']} {$v['name']} {$v['alias']} </a></li>";
}
?>
</ul>
</body>
</html>点击 "运行实例" 按钮查看在线实例
config.php 这个是配置文件
$db = [
'type' => 'mysql',
'host' => 'localhost',
'dbname' => 'cms',
'username' => 'root',
'password' => 'root',
];
//// 配置数据源DSN信息
$dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";
$user = $db['username'];
$password = $db['password'];点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号