博客列表 >0116接口、命名空间与mvc

0116接口、命名空间与mvc

曾
原创
2020年02月14日 17:07:05799浏览

接口

接口可以理解为,它给出了一个或者多个由它命名的类方法/函数,这些方法是共有的,由一个或者多个类去实现它所定义(给出)的方法/函数,注意实现它的时候需要把里面所有定义的方法/函数都实现。
命名为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. // 如果控制器里面有多个方法/函数,可以把模型数据,与视图数据,传递给构造方法,以达到数据共享


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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议