博客列表 >1203_面向对象编程 第27课

1203_面向对象编程 第27课

叮叮当当
叮叮当当原创
2019年12月04日 16:09:02683浏览

1. 手抄课堂笔记: 1203.md (必做)

2. 编程代码,抄写课堂案例,也可以自定义(选做)

demo1.php

  1. # OOP基本操作
  2. # 1. 创建类
  3. class Demo1{
  4. # 2. 添加类成员
  5. # 在类中的变量和函数,和程序中的变量与函数有区别,添加了访问限制
  6. # 变量=>属性,函数=>方法,访问限制符,成员
  7. public $site = 'google';
  8. public function getSite(){
  9. # 类实例化,
  10. $obj = new Demo1;
  11. # 返回类属性
  12. return $obj->site.' welcome';
  13. }
  14. }
  15. # 3. 访问类成员
  16. $obj = new Demo1;
  17. #访问属性:对象成员访问符:->
  18. echo $obj->site. '<br>';
  19. echo $obj->getSite();

demo2.php

  1. # 1. 创建类
  2. class Demo2{
  3. # 2. 添加类成员
  4. public $site = 'google';
  5. public $role = 'visitor';
  6. public function getSite(){
  7. # 类实例化, self是类的引用,始终与当前的类名绑定
  8. //$obj = new self; #等同 new Demo2
  9. # 返回类属性
  10. //return $obj->site.' welcome';
  11. return $this->site;
  12. }
  13. public function getRole(){
  14. //$obj = new self;
  15. # $this是当前类的实例引用,始终与类的实例绑定
  16. //return $obj->site;
  17. return $this->role;
  18. }
  19. }
  20. # 3. 访问类成员
  21. //$obj = new Demo2;
  22. $obj = new Demo2(); # 函数调用
  23. #访问属性:对象成员访问符:->
  24. echo $obj->getSite() .'<br>';
  25. echo $obj->getRole() .'<br>';

demo3.php

  1. class Demo3{
  2. public $site;
  3. public $role;
  4. public function getInfo(){
  5. return '我是' .$this->site. $this->role;
  6. }
  7. # 构造函数: <1>类实例的初始化,<2>自动完成在类实例创建过程中的操作
  8. public function __construct( $site, $role ){
  9. # 1 初始化类成员
  10. $this->site = $site;
  11. $this->role = $role;
  12. # 2 创建类实例
  13. //$obj = new self;
  14. # 3 添加类实例成员
  15. //$obj->site = $this->site;
  16. //$obj->role = $this->role;
  17. echo $this->getInfo();
  18. # 4 返回类实例
  19. //return $obj;
  20. # 用//注释的是系统内部执行的
  21. }
  22. }
  23. new Demo3( '谷歌' ,'游客');

demo4.php

  1. # 魔术方法:
  2. # __get($n): 当获取未定义不可见属性时触发,需要一个参数
  3. # __set($n, $val) :当给未定义不可见属性赋值时触发,需要两个参数
  4. # __isset($n): 当检测未定义不可见属性时触发
  5. # __unset($n): 当注销未定义不可见属性时触发
  6. class Demo4{
  7. public $site;
  8. private $role;
  9. # 构造函数
  10. public function __construct( $site, $role ){
  11. $this->site = $site;
  12. $this->role = $role;
  13. }
  14. public function __get( $n ){
  15. # 仅允许带name参数的访问
  16. if( isset( $_GET['name'] ) ){
  17. return isset( $this->$n ) ? $n.' : '.$this->$n : '属性未定义';
  18. }
  19. else{
  20. return '无权访问';
  21. }
  22. }
  23. public function __set($n, $val){
  24. # 针对role,仅允许带name参数,值为admin的设置
  25. if( isset( $_GET['name']) ){
  26. if( $n == 'role'){
  27. if( $_GET['name']==='admin' ){
  28. $this->$n = $val;
  29. echo $n.' 属性设置成功';
  30. }
  31. else{
  32. echo $n.' 属性设置失败';
  33. }
  34. }
  35. else{
  36. $this->$n = $val;
  37. echo $n.' 属性设置成功';
  38. }
  39. }
  40. else{
  41. echo '无权设置 '.$n.' 属性';
  42. }
  43. }
  44. public function __isset( $n ){
  45. # 仅允许带name参数的访问
  46. if( isset( $_GET['name'] ) ){
  47. if( isset($this->$n) ){
  48. echo '存在 '.$n.' 属性';
  49. }
  50. else{
  51. echo '没有 '.$n.' 属性';
  52. }
  53. }
  54. else{
  55. echo '无权检测 '.$n.' 属性';
  56. }
  57. }
  58. public function __unset($n ){
  59. # 仅允许带name参数的删除
  60. if(isset($_GET['name']) ) {
  61. if( $n != 'role' && $n != 'site' ){
  62. unset( $this->$n );
  63. echo $n . ' 属性删除成功';
  64. }
  65. else{
  66. echo '任何人都不能删除 '.$n.' 属性哦';
  67. }
  68. } else {
  69. echo '无权删除 ' . $n . ' 属性';
  70. }
  71. }
  72. }
  73. $obj = new Demo4( '爱奇艺' ,'会员');
  74. # http://php.io:8080/1203/demo4.php?name=xxx 属性未定义
  75. # http://php.io:8080/1203/demo4.php 无权访问
  76. echo $obj->role,'<hr>';
  77. # 属性不可见,设置值时,触发__set()
  78. $obj->role = '白银';
  79. echo '<br>';
  80. # 属性不可见,输出值时,触发__get()
  81. echo $obj->role,'<br>';
  82. # 属性不可见,检测时,触发__isset()
  83. isset($obj->role);
  84. echo '<br>';
  85. # 属性不可见,删除时,触发__unset()
  86. unset($obj->role);
  87. echo '<br>';
  88. isset($obj->role);
  89. echo '<hr>';
  90. # 属性未定义,输出属性时,触发__isset() 和 __get()
  91. echo $obj->age,'<br>';
  92. # 属性未定义,设置值时,触发__set()
  93. $obj->age = '66';
  94. echo '<br>';
  95. # 属性已定义,获取时,不会触发__get()
  96. echo $obj->age,'<br>';
  97. # 与上同理
  98. isset($obj->age);
  99. echo '<br>';
  100. # 与上同理
  101. unset($obj->age);
  102. echo '<br>';
  103. # 属性unset后未定义,检测属性时,触发__isset()
  104. isset($obj->age);
  105. echo '<hr>';

demo5.php

  1. class Demo5{
  2. public $site;
  3. protected $role;
  4. public function getInfo(){
  5. return '我是' .$this->site. '正儿八经的'.$this->role;
  6. }
  7. # 构造函数
  8. public function __construct( $site, $role ){
  9. $this->site = $site;
  10. $this->role = $role;
  11. }
  12. }
  13. class Demo5_1 extends Demo5{
  14. private $level;
  15. public function __construct( $site, $role, $level ){
  16. parent::__construct( $site, $role );
  17. $this->level = $level;
  18. }
  19. # 重写
  20. public function getInfo(){
  21. return parent::getInfo().',等级' .$this->level;
  22. }
  23. }
  24. $sub = new Demo5_1( '优酷' ,'黄金会员','v7');
  25. echo $sub->getInfo();

demo6.php

  1. # trait 代码复用方式,用了扩展当前类功能
  2. # trait 当作一个公共方法库
  3. # trait 使用类的定义的语法,但不是类
  4. # trait 还可用在类的继承上下文环境里
  5. trait Test{
  6. public function getInfo(){
  7. return '我是' .$this->site. '正儿八经的'.$this->role;
  8. }
  9. }
  10. # 宿主类
  11. class Demo6{
  12. use Test;
  13. public $site;
  14. protected $role;
  15. # 构造函数
  16. public function __construct( $site, $role ){
  17. $this->site = $site;
  18. $this->role = $role;
  19. }
  20. }
  21. class Demo6_1 extends Demo6{
  22. private $level;
  23. public function __construct( $site, $role, $level ){
  24. parent::__construct( $site, $role );
  25. $this->level = $level;
  26. }
  27. # 重写
  28. public function getInfo(){
  29. return parent::getInfo().',等级' .$this->level;
  30. }
  31. }
  32. $sub = new Demo6( '优酷' ,'黄金会员');
  33. echo $sub->getInfo(), '<hr>';
  34. $sub = new Demo6_1( '优酷' ,'黄金会员','v7');
  35. echo $sub->getInfo(), '<hr>';
  36. # 优先级:当前类的同名方法 > trait类的同名方法 > 父类的同名方法

demo7.php

  1. # 面向接口编程,是最重要的编程思想之一,许多高级应用严重依赖它
  2. # 接口是一种约定,定义了实现它的类中必须实现的方法
  3. # 接口中没有方法的具体实现, 所以不能实例化
  4. # 定义方法类中的工作原型
  5. interface Idemo{
  6. public function getInfo();
  7. public function hello();
  8. }
  9. # 工作类
  10. class Demo7 implements Idemo{
  11. public $site;
  12. protected $role;
  13. public function getInfo(){
  14. return '我是' .$this->site. '最靓的'.$this->role;
  15. }
  16. public function hello(){
  17. return '左边画个龙,右边画一道彩虹';
  18. }
  19. # 构造函数
  20. public function __construct( $site, $role ){
  21. $this->site = $site;
  22. $this->role = $role;
  23. }
  24. }
  25. $obj = new Demo7( '舞台','仔' );
  26. echo $obj->getInfo(),'<br>';
  27. echo $obj->hello();

demo8.php

  1. # 抽象类 abstract
  2. # 抽象类:有抽象方法,也有普通方法
  3. # 接口:只有抽象方法
  4. abstract class Ademo{
  5. abstract public function getInfo();
  6. public function hello(){
  7. return '蹦迪路上怎能有障碍';
  8. }
  9. }
  10. class Demo8 extends Ademo{
  11. public $site;
  12. protected $role;
  13. public function getInfo(){
  14. return 'come on ! '. $this->site. ',欢迎'.$this->role;
  15. }
  16. # 构造函数
  17. public function __construct( $site, $role ){
  18. $this->site = $site;
  19. $this->role = $role;
  20. }
  21. }
  22. $obj = new Demo8( 'Disco.club','舞池里的007' );
  23. echo $obj->getInfo(),'<br>';
  24. echo $obj->hello();

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