Blogger Information
Blog 34
fans 0
comment 0
visits 21938
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
12月3日_面向对象OOP编程 - 九期线上班
只猫
Original
590 people have browsed it

类与对象

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

一、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

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:别担心, 发现了自己的不足之处, 已经非常了不起了
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post