博主信息
博文 30
粉丝 0
评论 1
访问量 30343
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
0116接口、命名空间与mvc
原创
994人浏览过

接口

接口可以理解为,它给出了一个或者多个由它命名的类方法/函数,这些方法是共有的,由一个或者多个类去实现它所定义(给出)的方法/函数,注意实现它的时候需要把里面所有定义的方法/函数都实现。
命名为interface

  1. <?php
  2. //创建一个接口
  3. interface iDemo
  4. {
  5. //创建里面的方法/函数
  6. public function getName();
  7. public function getInfo();
  8. }

如果要实现一个类,需要用到命令implements

  1. <?php
  2. //创建一个接口
  3. interface iDemo
  4. {
  5. //创建里面的方法/函数
  6. public function getName();
  7. public function getInfo();
  8. }
  9. //创建一个类来实现接口里面的方法
  10. //使用implements创建
  11. class Demo implements iDemo
  12. {
  13. protected $name;
  14. protected $info;
  15. public function __construct($name,$info)
  16. {
  17. $this->name = $name;
  18. $this->info = $info;
  19. }
  20. // 实现接口定义的两个方法/函数
  21. public function getName()
  22. {
  23. return '我的名字叫:'.$this->name;
  24. }
  25. public function getInfo()
  26. {
  27. return '我喜欢:'.$this->info;
  28. }
  29. }
  30. $obj =new Demo('李雷','韩梅梅');
  31. echo $obj->getName();
  32. echo '<br>';
  33. echo $obj->getInfo();

图1

图2,接口里面的方法必须全部实现,如果有一个没实现就会报错(把第二个方法改名后,就会报错)

抽象类(可以理解为接口的另外一种表现方式)

类中某一个或者多个方法没有实现(只是声明),就可以把这个类定义为抽象类。定义为抽象类以后,它不能被实例化(不能被访问),只能当做父类,被子类继承,继承的子类需要把抽象类里面没有实现的方法全部实现。
命令abstract

  1. <?php
  2. //如果是一个抽象类,类名也需要添加abstract命令
  3. abstract class Demo1
  4. {
  5. public function getName()
  6. {
  7. return '李雷';
  8. }
  9. //没有实现的方法/函数,要添加abstract转为抽象类
  10. public abstract function getInfo();
  11. }
  12. //创建一个子类,继承父类
  13. class Sub extends Demo1
  14. {
  15. public $name;
  16. public $info;
  17. function __construct($name,$info)
  18. {
  19. $this->name = $name;
  20. $this->info = $info;
  21. }
  22. public function getName()
  23. {
  24. return '我是:'.$this->name;
  25. }
  26. //这里实现父类没有实现的方法/函数
  27. public function getInfo()
  28. {
  29. echo '我喜欢:'. $this->info;
  30. }
  31. }
  32. $obj = new Sub('韩梅梅','看书');
  33. echo $obj->getName();
  34. echo '<br>';
  35. echo $obj->getInfo();



图2(如果不用子类,直接访问抽象类,会报错)

命名空间

命名空间可以理解为一台电脑,里面有个两个文件夹,两个文件夹的命名互不相干,A的文件夹里面的文件可以和B的文件夹里面的文件名字相同,例如C盘里面有A和B两个文件夹,A和B两个文件夹下面都有一个名字相同的D文件夹,他们是互相不干扰的
命名空间它只限制,或者说作用在“函数,常量,类/接口”

  1. <?php
  2. //设置一个命名空间
  3. namespace One;
  4. const PATH = '/article';
  5. class Demo
  6. {
  7. }
  8. //设置第二个命名空间
  9. namespace Two;
  10. const PATH = '/setup';
  11. //常量PATH重名了,但是它们在两个不同的命名空间里面,所以互相不影响
  12. echo '输出命名空间Two里面的常量PATH:'.PATH;
  13. echo '<br>';
  14. echo '输出命名空间One里面的常量PATH:'.\One\PATH;


MVC

MVC:它包括,控制器(Controller)PHP文件,模型(Model)PHP文件,视图(View)HTML文件
控制器(Controller):控制器的作用是调用模型(Model)和视图(View),将模型产生的数据传递给视图,并让视图去显示(大部分情况也有隔绝视图直接访问模型的作用)
模型(Model):最重要的是数据模型,它会把获取到的数据保存,处理过后最终返回给数据库
视图(View):主要作用是美化模型的输出结果,以及数据的采集
用MVC的概念简单创建一个表格
模型(Model)

  1. <?php
  2. namespace mvc;
  3. //创建一个简单的数据
  4. class Model
  5. {
  6. public function getData()
  7. {
  8. return [
  9. ['id' => '1', 'name' => '苹果手机', 'model' => 'Apple11', 'price' => '8000'],
  10. ['id' => '2', 'name' => '华为手机', 'model' => 'Mate30', 'price' => '5000'],
  11. ['id' => '3', 'name' => '小米手机', 'model' => 'redmi', 'price' => '2000'],
  12. ];
  13. }
  14. }

视图(View)

  1. <?php
  2. namespace mvc;
  3. class View
  4. {
  5. public function fetch($data)
  6. {
  7. $table = '<table>';
  8. $table.= '<caption>物品详情</caption>';
  9. $table.= '<tr><td>ID</td><td>手机名字</td><td>型号</td><td>单价</td></tr>';
  10. foreach($data as $good)
  11. {
  12. $table.= '<tr><td>'.$good['id'].'</td><td>'.$good['name'].'</td><td>'.$good['model'].'</td><td>'.$good['price'].'</td></tr>';
  13. }
  14. $table.='</table>';
  15. return $table;
  16. }
  17. }
  18. echo '<style type="text/css">
  19. table {border-collapse:collapse;border:1px solid;width:400px;height:150px;text-align:center;}
  20. caption {font-size:1.2rem;background:lightblue;border:1px solid;}
  21. td{border:1px solid;}
  22. </style>';

控制器(Controller)

  1. <?php
  2. namespace mvc;
  3. // 这里引用的时候一定要注意,引用在命名空间的下方,不然会出现命名空间冲突
  4. require 'Model.php';
  5. require 'view.php';
  6. class Controller2
  7. {
  8. //添加模型对象成员
  9. private $model;
  10. //添加视图对象成员
  11. private $view;
  12. //创建构造方法,传参模型实例化与视图实例化
  13. public function __construct($model,$view)
  14. {
  15. $this->model = $model;
  16. $this->view = $view;
  17. }
  18. public function index()
  19. {
  20. //获取Model数据
  21. $data = $this->model->getData();
  22. //获取View数据
  23. return $this->view->fetch($data);
  24. }
  25. }
  26. //实例化Model
  27. $model = new Model;
  28. //实例化View
  29. $view = new View;
  30. $controller = new Controller2($model,$view);
  31. echo $controller->index();
  32. // 把Model获取方式,与View获取方式,放在外部,然后传参进去。
  33. // 如果控制器里面有多个方法/函数,可以把模型数据,与视图数据,传递给构造方法,以达到数据共享


学习到现在感觉离自己做出一个成品越来越近了,希望在不久的将来,自己不再是一个小白,也能自己独立开发一个小站点!!!加油加油!!!

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

批改状态:合格

老师批语:这只是mvc的最基本的流程, 离成品还远着呢, 不要着急, 第一步迈出来了
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

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