登录  /  注册
博主信息
博文 29
粉丝 0
评论 1
访问量 18837
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
12月4日作业 mvc
风清扬
原创
676人浏览过

12月4日作业

  1. 将课堂源代码, 全部写一遍, 在编辑器中写就可, 必须全部运行正确, 并加上自己理解的注释,不用手写
  1. 将最后一个demo5.php中的代码, 手写提交

<?php

namespace _1204;

use PDO;
// static: 声明类中的静态成员

// 1. 创建类
class Db1
{
// 2. 添加类成员
// 添加的静态成员: 属性, 方法
// 静态属性
protected static $pdo;
protected static $dsn = ‘mysql:host=127.0.0.1;dbname=mydb’;
protected static $username = ‘peter’;
protected static $password = ‘123456’;

  1. // 静态方法
  2. public static function connect()
  3. {
  4. // 在类中访问当前类的静态成员: self::
  5. self::$pdo = new PDO(self::$dsn, self::$username, self::$password);
  6. }
  7. // 测试方法
  8. public static function select()
  9. {
  10. // 连接数据库
  11. self::connect();
  12. return self::$pdo->query('select * from `users`', PDO::FETCH_ASSOC);
  13. }

}

// 3. 访问类成员
// 在类的外部,访问类中的静态成员, 直接用类名
$result = Db1::select();
foreach ($result as $row) {
echo ‘<pre>‘ . print_r($row, true) . ‘</pre>‘;
}

<?php

namespace _1204;

// static: 后期静态绑定
// 使用场景 : 静态继承的上下文环境中
// 类成员访问绑定时间: 在声明的时候绑定, 在调用的时候绑定
// 后期绑定就是在类成员被调用的时候再动态的绑定, 也叫:延迟绑定

use PDO;
// static: 声明类中的静态成员

// 1. 创建类
class Db2
{
// 2. 添加类成员
// 添加的静态成员: 属性, 方法
// 静态属性
protected static $pdo;
protected static $dsn = ‘mysql:host=127.0.0.1;dbname=mydb’;
protected static $username = ‘peter’;
protected static $password = ‘123456’;

  1. // 静态方法
  2. public static function connect()
  3. {
  4. // 在类中访问当前类的静态成员: self::
  5. static::$pdo = new PDO(static::$dsn, static::$username, static::$password);
  6. }
  7. // 测试方法
  8. public static function select()
  9. {
  10. // 连接数据库
  11. static::connect();
  12. return self::$pdo->query('select * from `users`', PDO::FETCH_ASSOC);
  13. }

}

class Sub extends Db2
{
protected static $username = ‘peter’;
protected static $password = ‘123456’;
public static function connect()
{
self::$pdo = new PDO(self::$dsn, self::$username, self::$password);
}
}

// 3. 访问类成员
// 在类的外部,访问类中的静态成员, 直接用类名
$result = Sub::select();
//本意是想用子类中的connect();
foreach ($result as $row) {
echo ‘<pre>‘ . print_r($row, true) . ‘</pre>‘;
}

<?php

// 控制器: 将商品信息表展示出来
namespace mvc;

// 1. 加载模型
require ‘Model.php’;

// 2. 加载视图
require ‘View.php’;

// 3. 创建控制器
class Controller1
{
public function index()
{
// 3.1 获取数据
$model = new Model();
$data = $model->getData();

  1. // 3.2 渲染模板
  2. $view = new View();
  3. return $view->fetch($data);

}
}

// 4. 客户端调用/访问类成员
$controller = new Controller1();
echo $controller->index();

<?php

// 控制器: 将商品信息表展示出来

// 将类中对其它类的实例化, 模型/视图分离出来, 降低耦合度

// 依赖注入

namespace mvc;

// 1. 加载模型
use BaconQrCode\Common\Mode;

require ‘Model.php’;

// 2. 加载视图
require ‘View.php’;

// 3. 创建控制器
class Controller2
{
public function index(Model $model, View $view)
{
// 3.1 获取数据
$data = $model->getData();

  1. // 3.2 渲染模板
  2. return $view->fetch($data);

}
}

// 4. 客户端调用/访问类成员
// 将模型与视图的实例化代码从控制器分离出来, 放到了客户端
$model = new Model();
$view = new View();

// 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
$controller = new Controller2();
echo $controller->index($model, $view);

<?php

// 控制器: 将商品信息表展示出来

// 依赖注入: 将注入点改到了控制器的构造方法中

namespace mvc;

// 1. 加载模型
use BaconQrCode\Common\Mode;

require ‘Model.php’;

// 2. 加载视图
require ‘View.php’;

// 3. 创建控制器
class Controller3
{
protected $model;
protected $view;
// 构造方法, 注入点改到了构造方法中, 实现了模型与视图对象的共享
public function __construct(Model $model, View $view)
{
$this->model = $model;
$this->view = $view;
}

  1. public function index()

{
// 3.1 获取数据
$data = $this->model->getData();

  1. // 3.2 渲染模板
  2. return $this->view->fetch($data);

}
}

// 4. 客户端调用/访问类成员
// 将模型与视图的实例化代码从控制器分离出来, 放到了客户端
$model = new Model();
$view = new View();

// 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
$controller = new Controller3($model, $view);
echo $controller->index();

<?php

// 控制器: 将商品信息表展示出来

// 依赖注入: 将注入点改到了控制器的构造方法中

namespace mvc;

// 1. 加载模型
use BaconQrCode\Common\Mode;

require ‘Model.php’;

// 2. 加载视图
require ‘View.php’;

/**/
//添加服务容器层
class Container
{
// 容器属性, 就是一个数组,里面全是创建对象的方法
protected $instance = [];

  1. // 1. 放进去: 将类的实例化过程绑定到容器中
  2. // $alias: 类实例的别名,
  3. public function bind($alias, \Closure $process)
  4. {
  5. // 将类实例化的方法绑定/ 存储到服务容器中
  6. $this->instance[$alias] = $process;
  7. }
  8. // 2. 取出来: 执行容器中的实例方法
  9. public function make($alias, $params=[])
  10. {
  11. return call_user_func_array($this->instance[$alias], []);
  12. }

}

// 实例化容器
$container = new Container();
// 用到模型对象, 视图对象,将它们绑定到容器中
$container->bind(‘model’, function () {return new Model();});
$container->bind(‘view’, function () {return new View();});

/**/

// 3. 创建控制器
class Controller4
{
public function index(Container $container)
{
// 3.1 获取数据
$data = $container->make(‘model’)->getData();

  1. // 3.2 渲染模板
  2. return $container->make('view')->fetch($data);

}
}

// 4. 客户端调用/访问类成员

// 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
$controller = new Controller4();
echo $controller->index($container);

<?php

// 控制器: 将商品信息表展示出来

// Facade技术: 规范/统一了对外部对象的调用方式, 全部改为了静态调用, 不管之前的方法是什么类型
// laravel, thinkphp

namespace mvc;

// 1. 加载模型
use BaconQrCode\Common\Mode;

require ‘Model.php’;

// 2. 加载视图
require ‘View.php’;

/**/
//添加服务容器层
class Container1
{
// 容器属性, 就是一个数组,里面全是创建对象的方法
protected $instance = [];

  1. // 1. 放进去: 将类的实例化过程绑定到容器中
  2. // $alias: 类实例的别名,
  3. public function bind($alias, \Closure $process)
  4. {
  5. // 将类实例化的方法绑定/ 存储到服务容器中
  6. $this->instance[$alias] = $process;
  7. }
  8. // 2. 取出来: 执行容器中的实例方法
  9. public function make($alias, $params=[])
  10. {
  11. return call_user_func_array($this->instance[$alias], []);
  12. }

}

// 实例化容器
$container = new Container1();
// 用到模型对象, 视图对象,将它们绑定到容器中
$container->bind(‘model’, function () {return new Model();});
$container->bind(‘view’, function () {return new View();});

/**/
// 添加Facade门面类
class Facade
{
protected static $container = null;
protected static $data = [];

  1. // 用服务容器给它初始化
  2. public static function initialize(Container1 $container)
  3. {
  4. static::$container = $container;
  5. }
  6. // 用静态代理方式将模型中的getData()静态化
  7. public static function getData()
  8. {
  9. static::$data = static::$container->make('model')->getData();
  10. }
  11. // 用静态代理方式将视图中的fetch()静态化
  12. public static function fetch()
  13. {
  14. return static::$container->make('view')->fetch(static::$data);
  15. }

}

// 声明一学生类
class Student extends Facade
{
//
}

/**/
// 3. 创建控制器
class Controller5
{
public function __construct(Container1 $container)
{
// 调用Faceda里面的初始化方法
Student::initialize($container);
}

  1. public function index()

{
// 3.1 获取数据
Student::getData();

  1. // 3.2 渲染模板
  2. return Student::fetch();

}
}

// 4. 客户端调用/访问类成员

// 将模型对象与视图对象,以参数的方式再次注入到控制器的方法
$controller = new Controller5($container);
echo $controller->index();

<?php
namespace mvc;

// 模型类:用于数据表的操作
class Model
{
public function getData()
{
// 用二维数组来模拟从表中获取到的商品数据
return [
[‘id’=>1, ‘name’=>’苹果电脑’, ‘model’=>’MacBook Pro’, ‘price’=>25800],
[‘id’=>2, ‘name’=>’华为手机’,’model’=>’P30 Pro’,’price’=>4988],
[‘id’=>3, ‘name’=>’小爱同学’,’model’=>’AI音箱’,’price’=>299],
];
}
}

<?php

namespace mvc;

// 视图类:渲染数据
class View
{
public function fetch($data)
{
$table = ‘<table>‘;
$table .= ‘<caption>商品信息表</caption>‘;
$table .= ‘<tr><th>ID</th><th>品名</th><th>型号</th><th>价格</th></tr>‘;

  1. foreach ($data as $product) {
  2. $table .= '<tr>';
  3. $table .= '<td>' . $product['id'] . '</td>';
  4. $table .= '<td>' . $product['name'] . '</td>';
  5. $table .= '<td>' . $product['model'] . '</td>';
  6. $table .= '<td>' . $product['price'] . '</td>';
  7. $table .= '</tr>';
  8. }
  9. $table .= '</table>';
  10. return $table;
  11. }

}

echo ‘<style>
table {border-collapse: collapse; border: 1px solid; width: 500px;height: 150px}
caption {font-size: 1.2rem; margin-bottom: 10px;}
tr:first-of-type { background-color:lightblue;}
td,th {border: 1px solid}
td:first-of-type {text-align: center}
</style>‘;

总结 mvc以前了解过,但是只知道原理 m模型(和数据库有关),view 视图(和显示有关) ,controller(控制器) ,现在了解到了他们之间的调用,还是不是很熟悉。

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:上来就能掌握学会, 是不现实的, 越到后面, 这样的情况就会更多... 这就是为什么许多人, 不论看什么书, 都停留在前三章的原因了
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学