博客列表 >12月03日_类与对象(OOP编程基本流程、 类与实例的引用、构造方法、类成员的访问控制、继承接口抽象)

12月03日_类与对象(OOP编程基本流程、 类与实例的引用、构造方法、类成员的访问控制、继承接口抽象)

fkkf467
fkkf467原创
2019年12月04日 11:07:51657浏览

1. OOP的基本步骤

  1. <?php
  2. // 面向对象(OOP)基本步骤
  3. // 1. 创建类
  4. class Demo1{
  5. // 2. 添加类成员
  6. // 创建属性
  7. public $name = '猪小明';
  8. // 创建方法
  9. public function getName(){
  10. // 第一步:类的实例化
  11. $obj = new Demo1;
  12. // 第二步:返回类属性
  13. return '我的名字是:' . $obj->name;
  14. }
  15. }
  16. // 3. 访问类成员
  17. $obj = new Demo1;
  18. echo $obj->name . '<br>';
  19. echo $obj->getName();

2. 类与实例的引用

  1. <?php
  2. // 1. 创建类
  3. class Demo2{
  4. // 2. 添加类成员
  5. public $name = '猪小明';
  6. public $age = 18;
  7. public function getName(){
  8. return '我的名字是:' . $this->name;
  9. }
  10. public function getAge(){
  11. return '我的年龄是:' . $this->age . '岁';
  12. }
  13. }
  14. // 3. 访问类成员
  15. $obj = new Demo2();
  16. echo $obj->getName() . '<br>';
  17. echo $obj->getAge() . '<br>';

3. 构造方法

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

4. 类成员的访问控制以及属性重载

  1. <?php
  2. // 1. 创建类
  3. class Demo4{
  4. // 2. 添加类成员
  5. public $name;
  6. // 如果不想让该属性在类的外部被访问,可以将该属性的访问控制符修改为:
  7. // private 私有成员,protected 受保护成员
  8. protected $age;
  9. private $job;
  10. public function __construct($name,$age,$job){
  11. $this->name = $name;
  12. $this->age = $age;
  13. $this->job = $job;
  14. }
  15. public function getInfo(){
  16. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  17. }
  18. // 属性重载, 通过魔术方法 __get($name), __set($name,$value), __isset($name), __unset($name)
  19. public function __get($name){
  20. $username = $_GET['username'] ?? '';
  21. if (isset($username) && $username === 'admin'){
  22. return $this->$name ?? '属性未定义';
  23. }
  24. return '无权访问';
  25. }
  26. public function __set($name, $value){
  27. $username = $_GET['username'] ?? '';
  28. if (isset($username) && $username === 'admin'){
  29. echo isset($this->$name) ? $this->$name=$value : '属性不存在';
  30. }else{
  31. echo '无权修改';
  32. }
  33. }
  34. public function __isset($name){
  35. $username = $_GET['username'] ?? '';
  36. if (isset($username) && $username === 'admin'){
  37. echo isset($this->$name) ? '存在该属性' : '没有改属性';
  38. }else{
  39. echo '无权检测';
  40. }
  41. }
  42. public function __unset($name){
  43. $username = $_GET['username'] ?? '';
  44. if (isset($username) && $username === 'admin'){
  45. unset($this->$name);
  46. echo '删除成功';
  47. }else{
  48. echo '无权删除';
  49. }
  50. }
  51. }
  52. // 3. 访问类成员
  53. $obj = new Demo4('猪小明',18,'程序员');
  54. echo $obj->age . '<br>';
  55. $obj->job = '老师';
  56. echo '<br>';
  57. isset($obj->sex);
  58. echo '<br>';
  59. unset($obj->age);

5. 类的继承

  1. <?php
  2. // 类的继承
  3. // 1. 创建类
  4. class Demo5{
  5. // 2. 添加类成员
  6. public $name;
  7. protected $age;
  8. private $job;
  9. public function __construct($name,$age,$job){
  10. $this->name = $name;
  11. $this->age = $age;
  12. $this->job = $job;
  13. }
  14. public function getInfo(){
  15. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  16. }
  17. }
  18. class Demo5_1 extends Demo5{
  19. private $salary;
  20. public function __construct($name, $age, $job,$salary){
  21. // parent:: 调用 父类中的成员
  22. parent::__construct($name, $age, $job);
  23. $this->salary = $salary;
  24. }
  25. // 重写父类中的方法
  26. public function getInfo(){
  27. return parent::getInfo() . ',我的工资是:' . $this->salary;
  28. }
  29. }
  30. // 3. 访问类成员
  31. $obj = new Demo5_1('猪小明',18,'程序员',12000);
  32. echo $obj->getInfo();

6. trait技术

  1. <?php
  2. // trait: 代码复用方式,用来扩展当前类的功能
  3. // trait: 当成一个公共方法库
  4. // trait使用了类的定义的语法,但不是类,所以不能实例化
  5. trait Test{
  6. public function getInfo(){
  7. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  8. }
  9. }
  10. // 1. 创建类
  11. class Demo6{
  12. // 导入trait类库
  13. use Test;
  14. // 2. 添加类成员
  15. public $name;
  16. protected $age;
  17. private $job;
  18. public function __construct($name,$age,$job){
  19. $this->name = $name;
  20. $this->age = $age;
  21. $this->job = $job;
  22. }
  23. }
  24. class Demo6_1 extends Demo6{
  25. private $salary;
  26. public function __construct($name, $age, $job,$salary){
  27. // parent:: 调用 父类中的成员
  28. parent::__construct($name, $age, $job);
  29. $this->salary = $salary;
  30. }
  31. // 重写父类中的方法
  32. /*public function getInfo(){
  33. return parent::getInfo() . ',我的工资是:' . $this->salary;
  34. }*/
  35. }
  36. // 优先级:当前类中的同名方法 > trait类中的同名方法 > 父类中的同名方法
  37. // 3. 访问类成员
  38. $obj = new Demo6('猪小明',18,'Java工程师');
  39. echo $obj->getInfo() . '<br>';
  40. $obj1 = new Demo6_1('张三',24,'PHP工程师',12000);
  41. echo $obj1->getInfo();

7. 接口interface

  1. <?php
  2. // 接口
  3. interface iDemo{
  4. public function getInfo();
  5. public function getJob();
  6. }
  7. // 1. 创建类
  8. class Demo7 implements iDemo{
  9. // 2. 添加类成员
  10. public $name;
  11. protected $age;
  12. private $job;
  13. public function __construct($name,$age,$job){
  14. $this->name = $name;
  15. $this->age = $age;
  16. $this->job = $job;
  17. }
  18. public function getInfo(){
  19. return '我的名字叫:' . $this->name . ',我今年' . $this->age . ',我的工作是:' . $this->job;
  20. }
  21. public function getJob(){
  22. return '我是一名优秀的' . $this->job;
  23. }
  24. }
  25. // 3. 访问类成员
  26. $obj = new Demo7('猪小明',18,'php程序员');
  27. echo $obj->getInfo() . '<br>';
  28. echo $obj->getJob() . '<br>';

8. 抽象类abstract

  1. <?php
  2. // 抽象类:包含抽象方法
  3. // 接口全是抽象方法
  4. // 抽象类中可以有普通方法
  5. abstract class Demo{
  6. abstract public function getInfo();
  7. public function getSalary($salary){
  8. return '我的工资是:' . $salary;
  9. }
  10. }
  11. // 1.创建类
  12. class Demo8 extends Demo{
  13. // 2. 添加类成员
  14. public $name;
  15. protected $age;
  16. private $job;
  17. public function __construct($name,$age,$job){
  18. $this->name = $name;
  19. $this->age = $age;
  20. $this->job = $job;
  21. }
  22. public function getInfo(){
  23. return '我的名字叫:' . $this->name . ',我今年' . $this->age . '岁,我的工作是:' . $this->job;
  24. }
  25. }
  26. // 3. 访问类成员
  27. $obj = new Demo8('猪小明',22,'程序员');
  28. echo $obj->getInfo() . '<br>';
  29. echo $obj->getSalary(20000);


9. 总结

通过以上实例的练习,对类与对象有了更深刻的认识和理解。

(重点)OOP编程基本流程:
  • 创建类
  • 添加类成员
  • 访问类成员
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议