Blogger Information
Blog 36
fans 2
comment 0
visits 23561
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
2019年12月3号:面向对象编程
Rambo-Yang
Original
748 people have browsed it

创建类和对象

  1. //1,创建类
  2. class Demo
  3. {
  4. //2,添加类成员
  5. public $site = 'PHP中文网';
  6. public $role = '讲师';
  7. public function getSite(){
  8. return $this->site.' 欢迎您';
  9. }
  10. public function getRole(){
  11. return $this->role;
  12. }
  13. }
  14. //3,访问类成员
  15. $obj = new Demo();
  16. echo $obj->site .'<br>';
  17. echo $obj->getRole() . '<br>';
  18. echo $obj->getSite() . '<br>';

运行效果:

构造方法

  1. class Demo2
  2. {
  3. public $site;
  4. public $role;
  5. public function getInfo()
  6. {
  7. return '我是:' . $this->site . $this->role;
  8. }
  9. //构造方法:实例化即执行
  10. public function __construct($site,$role){
  11. $this->site = $site;
  12. $this->role = $role;
  13. echo $this->getInfo();
  14. }
  15. }
  16. new Demo2('PHP中文网','老师');

运行效果:

魔术方法 __get($name)属性重载

  1. class Demo3
  2. {
  3. public $site;
  4. protected $role;
  5. public function getInfo()
  6. {
  7. return '我是:' . $this->site . $this->role;
  8. }
  9. //构造方法
  10. public function __construct($site, $role)
  11. {
  12. $this->site = $site;
  13. $this->role = $role;
  14. }
  15. //魔术方法:__get($name) ,属性重载
  16. public function __get($name)
  17. {
  18. $username = isset($_GET['username']) ? $_GET['username'] : '';
  19. if (isset($username) && $username == 'admin'){
  20. return isset($this->$name) ? $this->$name : '属性未定义';
  21. }else{
  22. return '无权访问';
  23. }
  24. }
  25. }
  26. $obj = new Demo3('PHP中文网','讲师');
  27. echo $obj->role;
  28. echo '<hr>';
  29. echo $obj->name;
  30. //$this->name 这是访问类中的一个名为name的成员变量
  31. //$this->$name 这是访问对象中的可变变量,可以理解成动态变量,变量名由$name的值决定,
  32. //如果$name = 'site' 那么 $this->$name 就等于$this->site 再查找当前类中是否有属性为site的成员变量

运行效果:

继承

  1. class Demo4
  2. {
  3. public $site;
  4. protected $role;
  5. public function getInfo(){
  6. return '我是:' . $this->site . ' 讲师:' . $this->role;
  7. }
  8. public function __construct($site,$role)
  9. {
  10. $this->site = $site;
  11. $this->role = $role;
  12. }
  13. }
  14. class Demo4_1 extends Demo4
  15. {
  16. private $course;
  17. public function __construct($site, $role, $course)
  18. {
  19. parent::__construct($site, $role);
  20. $this->course = $course;
  21. }
  22. public function getInfo()
  23. {
  24. return parent::getInfo() . ',负责的课程是:' . $this->course;
  25. }
  26. }
  27. $obj = new Demo4_1('php.cn','朱老师','php');
  28. echo $obj->getInfo();

运行效果:

trait公共方法库

  1. //trait 当成一个公共方法库,不能实例化
  2. trait Test
  3. {
  4. public function getInfo(){
  5. return '我是:'. $this->site . ' 讲师:' . $this->role;
  6. }
  7. }
  8. class Demo5
  9. {
  10. //导入trait类库
  11. use Test;
  12. public $site;
  13. protected $role;
  14. public function __construct($site,$role)
  15. {
  16. $this->site = $site;
  17. $this->role = $role;
  18. }
  19. }
  20. class Demo5_1 extends Demo5{
  21. private $course;
  22. public function __construct($site, $role,$course)
  23. {
  24. parent::__construct($site, $role);
  25. $this->course = $course;
  26. }
  27. }
  28. // 优先级: 当前类中的同名方法 > trait类中的同名方法 > 父类中的同名方法
  29. $demo5 = new Demo5('PHP中文网','朱老师');
  30. echo $demo5->getInfo();
  31. echo '<hr>';
  32. $obj = new Demo5_1('php.cn','zhulaoshi','PHP');
  33. echo $obj->getInfo();

运行效果:

接口

  1. //接口:定义工作类中的方法原型
  2. interface iDemo{
  3. public function getInfo();
  4. public function hello();
  5. }
  6. class Demo6 implements iDemo
  7. {
  8. public $site;
  9. protected $role;
  10. public function getInfo()
  11. {
  12. return '我是:' . $this->site . '讲师:'. $this->role;
  13. }
  14. public function hello(){
  15. return 'Hello Word!';
  16. }
  17. public function __construct($site,$role)
  18. {
  19. $this->site = $site;
  20. $this->role = $role;
  21. }
  22. }
  23. $obj = new Demo6('PHP中文网','朱老师');
  24. echo $obj->getInfo();
  25. echo '<hr>';
  26. echo $obj->hello();

运行效果:

抽象类

  1. //抽象类
  2. abstract class Cx
  3. {
  4. abstract public function getInfo();
  5. public function hello(){
  6. return 'Hello Word!';
  7. }
  8. }
  9. class Demo7 extends Cx
  10. {
  11. public $site;
  12. protected $role;
  13. public function getInfo()
  14. {
  15. return '我是:' . $this->site . '讲师' . $this->role;
  16. }
  17. public function __construct($site,$role)
  18. {
  19. $this->site = $site;
  20. $this->role = $role;
  21. }
  22. }
  23. $obj = new Demo7('php中文网','朱老师');
  24. echo $obj->getInfo() . '<br>';

运行效果:

手写:

总结:

1, 面向对象编程的基本流程:创建类,添加类成员,访问类成员
2, self 引用当前类,$this 引用当前类的实例/对象
3, __construct构造方法,实例化类时就会同步执行
4, 访问控制符punlic 类内、类外、子类均可见,protected类内、子类可见,类外不可见,private仅本类内可访问
5, $this->name 这是访问类中的一个名为name的成员变量
6, $this->$name 这是访问对象中的可变变量,可以理解成动态变量,变量名由$name的值决定, 如果$name = 'site' 那么 $this->$name 就等于$this->site 再查找当前类中是否有属性为site的成员变量
7, trait: 当成一个公共方法库,使用了类的定义的语法,但不是类,所以不能实例化,用use导入到类中使用
8, 优先级: 当前类中的同名方法 > trait类中的同名方法 > 父类中的同名方法
9, interface 接口只允许出现方法和常量,可见性必须为public,不能有方法体,接口中的方法必须都为抽象方法
10, 接口是一种约定, 定义了实现它的类中必须实现的方法,没有方法的具体实现, 所以不能实例化
11, implements类实现接口的关键字
12, abstract定义抽象方法、抽象类
13, 抽象类只能被继承,不能实例化,且抽象方法都必须在子类复写
14, 抽象方法不能有方法体,不能有{}

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