博客列表 >12月3日_面向对象OOP编程 - 九期线上班

12月3日_面向对象OOP编程 - 九期线上班

只猫
只猫原创
2019年12月04日 21:13:58587浏览

类与对象

类是对象的模板,对象是类的实例

一、1.创建类 2.添加类成员 3.访问类成员

demo1

  1. <?php
  2. //OOP (Object Oriented Programming)
  3. //基本步骤
  4. //1.创建类
  5. class Demo1
  6. {
  7. //2.添加类成员
  8. //在变量和函数前添加访问限制符变为类属性和类方法
  9. //类属性和类方法都是类成员 用对象成员访问符 -> 访问
  10. //属性
  11. public $site = 'php.com';
  12. //方法
  13. public function getSite(){
  14. //实例化这个类
  15. $obj = new Demo1;
  16. //返回类属性
  17. return $obj->site.'Welcome~~';
  18. }
  19. }
  20. //3.访问类成员
  21. $d1 = new Demo1;
  22. echo $d1->site.'<br>';
  23. echo $d1->getSite();
二、self当前类 $this当前类的实例

demo2

  1. <?php
  2. //OOP (Object Oriented Programming)
  3. //基本步骤
  4. //1.创建类
  5. class Demo2
  6. {
  7. //2.添加类成员
  8. //在变量和函数前添加访问限制符变为类属性和类方法
  9. //类属性和类方法都是类成员 用对象成员访问符 -> 访问
  10. //属性
  11. public $site = 'php.com';
  12. public $role = '讲师';
  13. //方法 在方法中要进行实例化
  14. public function getSite(){
  15. //实例化这个类
  16. $obj = new self;
  17. //返回类属性
  18. return $obj->site.'Welcome~~';
  19. }
  20. public function getRole(){
  21. //实例化这个类
  22. //$obj = new self;
  23. //添加$this 省略上面的new
  24. //伪变量 实现当前类实例的共享 与当前类实例绑定
  25. //返回类属性
  26. return $this->role.'Hello~~';
  27. }
  28. }
  29. //3.访问类成员
  30. $d1 = new Demo2;
  31. echo $d1->site.'<br>';
  32. echo $d1->getSite().'<br>';
  33. echo $d1->getRole().'<br>';
三、构造方法 __construct()

demo3

  1. <?php
  2. //OOP (Object Oriented Programming)
  3. //基本步骤
  4. //1.创建类
  5. class Demo3
  6. {
  7. //2.添加类成员
  8. public $site;
  9. public $role;
  10. //构造方法 预定义魔术方法
  11. public function __construct($site,$role){
  12. //自动调用,自动完成类的初始化、类实例创建过程中自动完成的
  13. //包括:(php自动完成)
  14. //创建类实例 $obj = new self;
  15. //添加类实例成员 $obj->site =$this->site;
  16. //返回类实例 return $obj;
  17. $this->site = $site;
  18. $this->role = $role;
  19. //输出 getinfo 自动执行
  20. echo $this->getInfo();
  21. }
  22. public function getInfo(){
  23. return '我叫:'.$this->site . $this->role;
  24. }
  25. }
  26. //3.访问类成员
  27. //有构造方法
  28. new Demo3('php中文网','讲师');
四、类成员访问控制

demo4

  1. <?php
  2. //访问控制 /封装
  3. //1.创建类
  4. class Demo4
  5. {
  6. //2.添加类成员
  7. //私有成员pravite 受保护成员protected
  8. public $site;
  9. protected $role;
  10. //不是为了禁止访问,而是防止非法访问,有限定的访问。
  11. //创建访问器 通过public方法 获取用户信息 进行验证
  12. public function getRole(){
  13. //设定访问限制条件
  14. $username = $_GET['username'] ?? '';
  15. if(isset($username) && $username === 'admin'){
  16. return $this->role;
  17. }else{
  18. echo '无法访问';
  19. }
  20. }
  21. //创建访问器 - 访问一个不存在的属性时
  22. //写死了属性值
  23. public function getName(){
  24. return isset($this->name)?$this->name : '不存在的属性';
  25. }
  26. //魔术方法 __get __set __isset 、__unset
  27. public function __get($param){
  28. //重定向所有对未授权不存在属性的访问
  29. $username = $_GET['username'] ?? '';
  30. if(isset($username) && $username === 'admin'){
  31. return isset($this->$param)?$this->$param : '不存在的属性';
  32. }else{
  33. echo '无法访问';
  34. }
  35. }
  36. public function getInfo(){
  37. return '我叫:'.$this->site . $this->role;
  38. }
  39. public function __construct($site,$role){
  40. $this->site = $site;
  41. $this->role = $role;
  42. }
  43. }
  44. //3.访问类成员
  45. $d1 = new Demo4('phpcn','讲师');
  46. //echo $d1->role.'<br>'; // Fatal error: Uncaught Error:Cannot access protected property
  47. //使用访问器
  48. echo $d1->getRole(); //当前是无法访问
  49. //url中传入$_GET的值admin 后可以访问
  50. echo '<hr>';
  51. echo $d1->getName();
  52. echo '<hr>';
  53. echo $d1->name;
五、类的继承

demo5

  1. <?php
  2. //类的继承
  3. //1.创建类
  4. class Demo5
  5. {
  6. //2.添加类成员
  7. //私有成员pravite 受保护成员protected
  8. //不是为了禁止访问,而是防止非法访问,有限定的访问。
  9. public $site;
  10. protected $role;
  11. public function __construct($site,$role){
  12. $this->site = $site;
  13. $this->role = $role;
  14. }
  15. public function getInfo(){
  16. return '我叫:'.$this->site . $this->role;
  17. }
  18. }
  19. //创建子类
  20. class Demo5_1 extends Demo5
  21. {
  22. //继承
  23. //扩展
  24. private $course; //子类新添加属性
  25. public function __construct($site,$role,$course){
  26. //获取父类原有的构造函数中的内容
  27. parent::__construct($site,$role);
  28. //写自己的
  29. $this->course = $course;
  30. }
  31. //重写方法getInfo
  32. public function getInfo(){
  33. //拿过来
  34. return parent::getInfo().',课程:'. $this->course;
  35. }
  36. //代码复用
  37. }
  38. //3.访问类成员
  39. $dd = new Demo5_1('php.cn','JVC','math');
  40. echo $dd->getInfo();
六、新trait技术 php5.4+

demo6

  1. <?php
  2. //trait 代码复用
  3. //公共代码库 类的语法 但不是类 不能实例化
  4. trait Ku
  5. {
  6. public function getInfo(){
  7. return 'trait中:'.$this->site . $this->role;
  8. }
  9. }
  10. //1.创建类
  11. class Demo6
  12. {
  13. //导入trait
  14. use Ku;
  15. //2.添加类成员
  16. //私有成员pravite 受保护成员protected
  17. //不是为了禁止访问,而是防止非法访问,有限定的访问。
  18. public $site;
  19. protected $role;
  20. public function __construct($site,$role){
  21. $this->site = $site;
  22. $this->role = $role;
  23. }
  24. // public function getInfo(){
  25. // return '父类中:'.$this->site . $this->role;
  26. // }
  27. }
  28. //创建子类
  29. class Demo6_1 extends Demo6
  30. {
  31. //继承
  32. //扩展
  33. private $course; //子类新添加属性
  34. public function __construct($site,$role,$course){
  35. //获取父类原有的构造函数中的内容
  36. parent::__construct($site,$role);
  37. //写自己的
  38. $this->course = $course;
  39. }
  40. //重写方法getInfo
  41. public function getInfo(){
  42. //拿过来
  43. return parent::getInfo().',课程:'. $this->course;
  44. }
  45. }
  46. //3.访问类成员
  47. //正常
  48. $d1 = new Demo6('php.cn','JVC');
  49. echo $d1->getInfo();
  50. echo '<br>';
  51. $dd = new Demo6_1('php','java','go');
  52. echo $dd->getInfo();
七、接口

demo7

  1. <?php
  2. //类的模板是接口
  3. interface iDemo
  4. {
  5. //接口常量
  6. //接口方法
  7. public function getInfo();
  8. public function hello();
  9. }
  10. //1.创建类
  11. class Demo7 implements iDemo
  12. {
  13. //工作类
  14. public $site;
  15. protected $role;
  16. public function __construct($site,$role){
  17. $this->site = $site;
  18. $this->role = $role;
  19. }
  20. public function getInfo(){
  21. return $this->site . $this->role;
  22. }
  23. public function hello(){
  24. return 'hello';
  25. }
  26. }
  27. //3.访问类成员
  28. $d1 = new Demo7('php','java');
  29. echo $d1->getInfo();
  30. echo '<br>';
  31. echo $d1->hello();
八、抽象类

demo8

  1. <?php
  2. //抽象类 不能实例化 只能做父类
  3. abstract class Abs{
  4. abstract public function getInfo();
  5. public function hello(){
  6. return 'hello';
  7. }
  8. }
  9. //1.创建类
  10. class Demo8 extends Abs
  11. {
  12. //2.添加类成员
  13. public $site;
  14. protected $role;
  15. public function __construct($site,$role){
  16. $this->site = $site;
  17. $this->role = $role;
  18. }
  19. //实现抽象类中的方法
  20. public function getInfo(){
  21. return $this->site . $this->role;
  22. }
  23. }
  24. //3.访问类成员
  25. $d = new Demo8('php','c');
  26. echo $d->getInfo();
  27. echo '<br>';
  28. echo $d->hello();

手写:

[创建类,添加类成员,访问类成员.mp3] ×10

总结:一些普通的问题经过老师不同的角度讲解又会有不一样的认知,更加深记忆。弥补自己之前一些未理解的内容。查缺补漏有收获。目前对类的使用还是太少,我认识它,它不认识我。

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