博客列表 >PHP基础 接口、抽象类、命名空间与MVC------PHP培训十期线上班 学号:510251 01月16日作业

PHP基础 接口、抽象类、命名空间与MVC------PHP培训十期线上班 学号:510251 01月16日作业

赵大叔
赵大叔原创
2020年02月17日 22:44:44618浏览

接口、抽象类、命名空间与MVC

一、接口

1、知识点

1.1 对象的模板是:类; 类的模板是:接口
1.2 面向接中编程:是实现面向对象编程的三大特征(继承、封装、多态)之多态的重要手段
1.3 继承:extends; 封装:public, private, protected; 多态:接口
1.4 接口通过interface关键字声明
1.5 接口中只能声明常量和未实现的方法(只有方法体没有具体的实现),并且访问权限必须是public
1.6 接口不能进行实例化,只能通过类实现,一个类可以实现多个接口使用,隔开
1.7 一个类实现接口就必须将实现接口中声明的所有方法
1.8 语法

  1. interface iDemo
  2. {
  3. //常量
  4. const 常量名=常量值;
  5. //只声明方法,不实现
  6. public function getName();
  7. public function aAaaa();
  8. }
  9. //创建类实现接口:implements
  10. class Demo1 implements iDemo
  11. {
  12. //实现iDemo接口的类必须将接口中声明的方法全部实现
  13. public function getName()
  14. {
  15. //......
  16. }
  17. public function aAaaa()
  18. {
  19. //......
  20. }
  21. }
  22. }

2、php代码

  1. //创建接口:interface
  2. interface iDemo
  3. {
  4. //接口方法:只声明,不实现
  5. public function getIfor();
  6. public function hello();
  7. }
  8. //创建类实现接口
  9. class Demo1 implements iDemo
  10. {
  11. //创建自有属性
  12. public $site;
  13. protected $role;
  14. //初始化自有属性
  15. public function __construct($site, $role)
  16. {
  17. $this->site = $site;
  18. $this->role = $role;
  19. }
  20. //实现iDemo接口的类必须将接口中声明的方法全部实现
  21. public function getIfor()
  22. {
  23. return '我是:' .$this->site .'的讲师:' .$this->role;
  24. }
  25. public function hello()
  26. {
  27. return 'Hello, 大家好。。。';
  28. }
  29. }
  30. $obj =new Demo1('php.cn', '朱老师');
  31. echo $obj->getIfor();
  32. echo '<br>';
  33. echo $obj->hello();

三、抽象类:类中有未实现的方法

1、知识点

1.1 使用abstract声明
1.2 不能被实例化,只能当父类被继承,通过子类来访问
1.3 抽象类可以包含普通成员,但必须包含一个抽象方法(未被实现的方法)
1.4 子类继承抽象类时,抽象类中的抽象方法必须要在子类中实现
1.5 MVC模型用到

2、php代码

  1. <?php
  2. //抽象类:
  3. abstract class Demo2
  4. {
  5. //创建自有属性
  6. public $site;
  7. protected $role;
  8. public function __construct($site, $role)
  9. {
  10. $this->site = $site;
  11. $this->role = $role;
  12. }
  13. //抽象方法:没有被实现,只是一个声明
  14. abstract public function getIfor();
  15. //实现
  16. public function hello()
  17. {
  18. return 'Hello, 大家新年好。。。';
  19. }
  20. }
  21. //创建子类
  22. class Sub extends Demo2
  23. {
  24. private $course;
  25. //子类中实现抽象类方法
  26. public function getIfor()
  27. {
  28. return '我是:' .$this->site .'的讲师:' .$this->role .', 教的课程是:' .$this->course;
  29. }
  30. public function __construct($site, $role, $course)
  31. {
  32. parent::__construct($site, $role);
  33. $this->course = $course;
  34. }
  35. }
  36. $obj =new Sub('php.cn', '朱老师', 'JS');
  37. echo $obj->getIfor();
  38. echo '<br>';
  39. echo $obj->hello();

三、静态成员:属于类,不属于对象,在多个对象中共享

1、知识点

1.1 添加static关键字,就可以将成员定义为静态成员
1.2 在静态方法中只能访问静态成员
1.3 静态方法不允许用类实例访问,所以内部也不允许出现类实例的引用$this
1.4 访问静态成员,必须用类来访问

2、php代码

  1. <?php
  2. class Demo3
  3. {
  4. //静态属性
  5. public static $name = '朱老师';
  6. public $salary = 10000;
  7. //静态方法
  8. public static function getName()
  9. {
  10. //静态方法不允许用类实例访问,所以内部也不允许出现类实例的引用$this
  11. //return $this->$name;
  12. return self::$name;
  13. }
  14. }
  15. //访问静态成员
  16. //必须用类来访问
  17. $obj = new Demo3();
  18. echo Demo3::$name;
  19. echo '<br>';
  20. echo $obj->getName();
  21. echo '<br>';
  22. echo Demo3::getName();

四、命名空间:主要是解决了全局成员的命名冲突

1、知识点

1.1 全局成员:不受作用域限制的成员—-类/接口、函数、常量
1.2 命名空间使用namespace关键字定义
1.3 命名空间必须写在第一行,之前不能有任何代码
1.4 当前空间找到,则调用的是当前空间的函数; 当前的命名空间找不到某个函数或常量时,会自动到全局的命名空间进行查找
1.5 创建全局空间:全局空间和非全局空间格式分一致

2、php代码

  1. <?php
  2. namespace one
  3. {
  4. class A
  5. {
  6. public function getName()
  7. {
  8. return (new \A())->name;
  9. }
  10. }
  11. function a()
  12. {
  13. }
  14. //当前空间找到,则调用的是当前空间的函数
  15. function var_dump()
  16. {
  17. echo 'AAAAA';
  18. }
  19. const C = 1;
  20. echo (new A)->getName();
  21. echo '<br>';
  22. //类不会触发全局查找,函数可以
  23. //A空间中无函数var_dump
  24. //函数,常量,当前空间找不到,就到全局空间找
  25. var_dump( (new A)->getName());
  26. }
  27. namespace two {
  28. class A
  29. {
  30. }
  31. function a()
  32. {
  33. }
  34. const C = 1;
  35. //访问空间One中的A类,全局的空间使用:\
  36. echo \One\A::class;
  37. }
  38. //创建全局空间:全局空间和非全局空间格式分一至
  39. namespace
  40. {
  41. class A
  42. {
  43. public $name = 'zhu老师';
  44. }
  45. }

五、MVC

1、Model.php

  1. <?php
  2. namespace mvc;
  3. class Model
  4. {
  5. public function getData()
  6. {
  7. $data = [
  8. ['id' => 1, 'msnv' => 'TH000004', 'name' => 'van'],
  9. ['id' => 2, 'msnv' => 'TH045386', 'name' => 'sinh'],
  10. ['id' => 3, 'msnv' => 'TH059660', 'name' => 'phi'],
  11. ['id' => 4, 'msnv' => 'TH034876', 'name' => 'binh']
  12. ];
  13. return $data;
  14. }
  15. }

2、View.php

  1. <?php
  2. namespace mvc;
  3. class View
  4. {
  5. function fetch ($data)
  6. {
  7. $table = '<table border="2">';
  8. $table .= '<caption>员工名单</caption>';
  9. $table .= '<tr><td>id</td><td>msnv</td><td>name</td></tr>';
  10. foreach ($data as $good) {
  11. $table .= '<tr>';
  12. $table .= '<td>' .$good['id'] .'</td>';
  13. $table .= '<td>' .$good['msnv'] .'</td>';
  14. $table .= '<td>' .$good['name'] .'</td>';
  15. $table .= '</tr>';
  16. }
  17. $table .= '</table>';
  18. return $table;
  19. }
  20. }

3、Controller.php

  1. <?php
  2. namespace MVC;
  3. //1、加载模型类
  4. require 'Model.php';
  5. //2、加载视图类
  6. require 'View.php';
  7. //3、创建控制器
  8. class Controller
  9. {
  10. //模型对象属性
  11. private $model = '';
  12. //视图对象属性
  13. private $view = '';
  14. //构造方法,将这个构造方作为外部对象的注入点
  15. public function __construct($model, $view)
  16. {
  17. $this->model = $model;
  18. $this->view = $view;
  19. }
  20. public function index()
  21. {
  22. //1、获取数据
  23. $data = $this->model->getData();
  24. //2、渲染模板
  25. return $this->view->fetch($data);
  26. }
  27. public function Update()
  28. {
  29. //.....
  30. }
  31. }
  32. //4、客户端调用
  33. $model = new Model();
  34. $view = new View();
  35. //4.1 实例化控制器类
  36. //依赖注入:注入点是构造方法,实现对外部依赖对象的共享
  37. $controller = new Controller($model, $view);
  38. echo $controller->index();

4、结果展示

undefined

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