博客列表 >12月3日—面向对象的复习

12月3日—面向对象的复习

曾龙宇
曾龙宇原创
2019年12月04日 22:18:45565浏览

demo1

  1. <?php
  2. //OOP基本步骤
  3. // 1.创建类
  4. class Demo1{
  5. //2.添加类成员
  6. //在类中的变量和函数,和程序中的变量与函数有区别,添加了访问限制符
  7. //变量=>属性,函数=>方法,访问限制符 成员
  8. //创建属性
  9. public $name = '张三';
  10. public function getName(){
  11. $obj = new Demo1();
  12. return $obj->name;
  13. }
  14. }
  15. //3.访问类成员
  16. $obj = new Demo1();
  17. //访问属性,对象成员访问符:->
  18. echo $obj->name;
  19. echo $obj->getName();

demo2

  1. <?php
  2. // 1.创建类
  3. class Demo2{
  4. //2.添加类成员
  5. public $name = '张三';
  6. public $age = 25;
  7. public function getName(){
  8. //第一步:类的实例化:self是类名的引用,始终与当前的类名绑定
  9. return $this->name;
  10. }
  11. public function getAge(){
  12. return $this->age;
  13. }
  14. }
  15. //3.访问类成员
  16. $obj = new Demo2();
  17. echo $obj->name;
  18. echo $obj->getAge();

demo3

  1. <?php
  2. //1.创建类
  3. class Demo3{
  4. //2.添加类成员
  5. public $name;
  6. public $age;
  7. public function getInfo(){
  8. return '我是'.$this->name.',今年'.$this->age.'岁';
  9. }
  10. //构造方法:类实例的初始化,自动完成在类实例中创建过程中的操作
  11. public function __construct($name,$age){
  12. //1.初始化类成员
  13. $this->name = $name;
  14. $this->age = $age;
  15. //在类实例话是会被自动执行
  16. echo $this->getInfo();
  17. }
  18. }
  19. //3.访问类成员
  20. new Demo3('张三',25);

demo4

  1. <?php
  2. //访问控制,实现类的封装
  3. //1.创建类
  4. class Demo4{
  5. //2.添加类成员
  6. public $name;
  7. //如果不想让该属性在类的外部被访问,可以将该属性的访问控制符修改为:
  8. //private 私有成员 protected 受保护成员
  9. protected $age;
  10. public function getInfo(){
  11. return '我是'.$this->name.',今年'.$this->age.'岁';
  12. }
  13. //构造方法
  14. public function __construct($name,$age){
  15. $this->name = $name;
  16. $this->age = $age;
  17. }
  18. //外部无权访问,是为了防止非法访问,并不代表禁止访问
  19. //为这样的属性创建一个访问器方法,来过滤用户的访问请求
  20. public function getAge(){
  21. //仅允许用户是‘admin’的用户访问,其他访问返回:无权访问
  22. $user = $_GET['user']??'';
  23. if (isset($user)&&$user==='admin'){
  24. return $this->age;
  25. }else{
  26. return '无权访问';
  27. }
  28. }
  29. public function getRole(){
  30. return isset($this->role)?$this->role:'不存在该属性';
  31. }
  32. //魔术方法:__get($name)属性重载
  33. public function __get($name){
  34. //仅允许用户是‘admin’的用户访问,其他访问返回:无权访问
  35. $user = $_GET['user']??'';
  36. if (isset($user)&&$user==='admin'){
  37. return isset($this->name)?$this->name:'属性未定义';
  38. }else{
  39. return '无权访问';
  40. }
  41. }
  42. }
  43. //3.访问类成员
  44. $obj = new Demo4('张三',25);
  45. echo $obj->name;
  46. echo $obj->role;

demo5

  1. <?php
  2. //类的继承
  3. //1.创建类
  4. class Demo5{
  5. //2.添加类成员
  6. public $name;
  7. protected $age;
  8. public function getInfo(){
  9. return '我是'.$this->name.',今年'.$this->age.'岁';
  10. }
  11. //构造方法
  12. public function __construct($name,$age){
  13. $this->name = $name;
  14. $this->age = $age;
  15. }
  16. }
  17. class Demo5_1 extends Demo5{
  18. //当前自雷的自身属性
  19. private $sex;
  20. public function __construct($name, $age,$sex){
  21. parent::__construct($name, $age);
  22. $this->sex = $sex;
  23. }
  24. //重写父类中的方法
  25. public function getInfo(){
  26. return parent::getInfo().',性别是:'.$this->sex;
  27. }
  28. }
  29. //3.访问类成员
  30. $obj = new Demo5_1('张三',25,'男');
  31. echo $obj->getInfo();

demo6

  1. <?php
  2. //trait:代码复用方式,用来扩展当前类的功能
  3. //trait:当成一个公共方法库
  4. //trait:使用了类的定义的语法,但不是类,所以不能实例化
  5. trait Test{
  6. public function getInfo(){
  7. return '我是'.$this->name.',今年'.$this->age.'岁';
  8. }
  9. }
  10. //1.创建类
  11. //Demo6:宿主类
  12. class Demo6{
  13. //导入trait类
  14. use Test;
  15. //2.添加类成员
  16. public $name;
  17. protected $age;
  18. //构造方法
  19. public function __construct($name,$age){
  20. $this->name = $name;
  21. $this->age = $age;
  22. }
  23. }
  24. //trait:还可以用在类的继承上下文环境中
  25. class Demo6_1 extends Demo6{
  26. //当前自雷的自身属性
  27. private $sex;
  28. public function __construct($name, $age,$sex){
  29. parent::__construct($name, $age);
  30. $this->sex = $sex;
  31. }
  32. //重写父类中的方法
  33. public function getInfo(){
  34. return parent::getInfo().',性别是:'.$this->sex;
  35. }
  36. }
  37. // 优先级: 当前类中的同名方法 > trait类中的同名方法 > 父类中的同名方法
  38. //3.访问类成员
  39. $obj = new Demo6('张三',25);
  40. echo $obj->getInfo();
  41. $obj1 = new Demo6_1('李四',45,'男');
  42. echo $obj1->getInfo();

demo7

  1. <?php
  2. //接口:
  3. //对象的模板是类,类的模板是哪个呢?类的模板是接口
  4. //面向接口编程是最重要的编程思想之一,许多高级应用都严重依赖于它
  5. //接口是一种约定,定义了实现它的类中必须实现的方法
  6. //接口中没有方法的具体实现,所以不能实例化
  7. //接口:定义工作类中的方法原型
  8. interface iDemo{
  9. public function getInfo();
  10. public function hello();
  11. }
  12. class Demo7 implements iDemo{
  13. public $name;
  14. protected $age;
  15. public function getInfo(){
  16. return '我是'.$this->name.',今年'.$this->age.'岁';
  17. }
  18. public function hello(){
  19. return '大家好';
  20. }
  21. public function __construct($name,$age){
  22. $this->name = $name;
  23. $this->age = $age;
  24. }
  25. }
  26. //3.访问类成员
  27. $obj = new Demo7('张三','25');
  28. echo $obj->getInfo();
  29. echo $obj->hello();

demo8

  1. <?php
  2. //抽象类:有抽象方法,也是要实现的方法
  3. //接口全是抽象方法
  4. //共同之处:统统不能实例化,原因就是内部有抽象方法
  5. abstract class Chouxiang{
  6. //抽象方法
  7. abstract public function getInfo();
  8. public function hello(){
  9. return '大家好';
  10. }
  11. }
  12. //1.创建类
  13. //Demo8:工作类
  14. class Demo8 extends Chouxiang {
  15. public $name;
  16. protected $age;
  17. public function getInfo(){
  18. return '我是'.$this->name.',今年'.$this->age.'岁';
  19. }
  20. public function __construct($name,$age){
  21. $this->name = $name;
  22. $this->age = $age;
  23. }
  24. }
  25. //3.访问类成员
  26. $obj = new Demo8('张三','25');
  27. echo $obj->getInfo();
  28. echo $obj->hello();

手抄作业


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