Blogger Information
Blog 30
fans 0
comment 1
visits 24093
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0116接口、命名空间与mvc
Original
800 people have browsed it

接口

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


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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:这只是mvc的最基本的流程, 离成品还远着呢, 不要着急, 第一步迈出来了
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post