Blogger Information
Blog 29
fans 0
comment 0
visits 18387
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
面向对象封装,继承,加载器
CC
Original
651 people have browsed it

面向对象认识

  • oop: (Object Oriented Progrmming)面向对象编程
  • 面向过程编程: 直接面向变量函数编程
  • oop: 直接面向对象编程(封装了变量和函数的一个编程单元)

    面向过程认识

    1. <?php
    2. // 变量
    3. $n= 100;
    4. $m=200;
    5. // 函数
    6. function sum($a,$b){
    7. return $a+$b;
    8. };
    9. echo sum($n,$m);
  • 面向对象封装

  • 类的公有属性

    1. <?php
    2. // 声明的类与文件一致
    3. class Product
    4. {
    5. // 类成员:属性,方法
    6. // 属性:变量
    7. // public 公开指定name是公开属性(公有属性)
    8. public $name;
    9. public $price;
    10. // 方法:函数
    11. // 构造方法
    12. // 双下划线的方法:魔术方法,由系统自动调用
    13. // 类实例化的时候会调用它
    14. public function __construct($name, $price)
    15. {
    16. // 初始化类成员,让类实例化确定下来
    17. //this $当前类实例的引用
    18. $this->name = $name;
    19. $this->price = $price;
    20. // 不用return返回
    21. }
    22. public function show(): string
    23. {
    24. return "$this->name : $this->price 元";
    25. }
    26. }
  • 类的公有属性面向对象实例
    1. <?php
    2. <?php
    3. // 导入文件
    4. require 'Product.php';
    5. $moblie=new Product('电脑',888);
    6. echo $moblie->name;
    7. echo '<hr>';
    8. var_dump($moblie);
  • 受保护的私有属性
  1. <?php
  2. // 声明的类与文件一致
  3. class Product
  4. {
  5. // 类成员:属性,方法
  6. // 属性:变量
  7. //protected: 受保护成员,仅限本类以及子类访问
  8. protected $name;
  9. protected $price;
  10. // 方法:函数
  11. // 构造方法
  12. // 双下划线的方法:魔术方法,由系统自动调用
  13. // 类实例化的时候会调用它
  14. public function __construct($name, $price)
  15. {
  16. // 初始化类成员,让类实例化确定下来
  17. //this $当前类实例的引用
  18. $this->name = $name;
  19. $this->price = $price;
  20. // 不用return返回
  21. }
  22. public function show(): string
  23. {
  24. return "$this->name : $this->price 元";
  25. }
  26. }
  • 实例化访问受保护的私有方法
    1. <?php
    2. // 导入文件
    3. require 'Product.php';
    4. $moblie=new Product('手机',888);
    5. echo $moblie->show();
  • 本质是: 封装
  • 目标是: 代码复用
    类的加载器
  • 相当于中介
    1. <?php
    2. // 类的自动加载
    3. spl_autoload_register(function($class){
    4. require $class.'.php';
    5. });
    在加载器中引入,访问实例化类的方法
    1. <?php
    2. // 类的自动加载器
    3. require 'loader.php';
    4. // 实例化
    5. $snack = new Product('冰块',11);
    6. echo $snack->show();
    静态属性与静态方法
  • 静态属性:类中成员并非全部都要使用”类实例’方法,也有可以用”类”访问的成员
  1. <?php
  2. class Staff{
  3. // 静态属性
  4. public static $name;
  5. public static $id;
  6. // 构造函数
  7. public function __construct($name,$id)
  8. {
  9. self::$name = $name;
  10. self::$id = $id;
  11. }
  12. // 静态方法
  13. public static function show(){
  14. return sprintf('%s, 这个月工资: %d', self::$name, self::$id);
  15. }
  16. }
  1. <?php
  2. require 'loader.php';
  3. $staff = new Staff('刘五',66);
  4. // 访问类的静态属性
  5. echo Staff::$name;
  6. echo' <hr>';
  7. // 访问类的静态方法
  8. echo Staff::show();
  9. echo' <hr>';
  10. // 访问实例的静态方法
  11. echo $staff->show();
  12. // 不能访问实例的静态属性

继承

  • 父类

    1. <?php
    2. // 声明的类与文件一致
    3. class Product
    4. {
    5. // 类成员:属性,方法
    6. // 属性:变量
    7. //protected: 受保护成员,仅限本类以及子类访问
    8. protected $name;
    9. protected $price;
    10. // 方法:函数
    11. // 构造方法
    12. // 双下划线的方法:魔术方法,由系统自动调用
    13. // 类实例化的时候会调用它
    14. public function __construct($name, $price)
    15. {
    16. // 初始化类成员,让类实例化确定下来
    17. //this $当前类实例的引用
    18. $this->name = $name;
    19. $this->price = $price;
    20. // 不用return返回
    21. }
    22. public function show(): string
    23. {
    24. return "$this->name : $this->price 元";
    25. }
    26. }
  • 子类
  1. <?php
  2. require 'loader.php';
  3. // sub继承product类
  4. class Sub extends Product{
  5. // 对父类方法重写
  6. // 对父类的功能的扩展
  7. #子类构造器
  8. private $num;
  9. public function __construct($name,$price,$num)
  10. {
  11. // 调用父类构造方法
  12. parent::__construct($name,$price);
  13. // 添加子类构造方法
  14. $this ->num = $num;
  15. }
  16. // 输出方法
  17. public function show():string
  18. {
  19. // parent调用父类方法
  20. return parent::show().", 数量: $this->num 个";
  21. }
  22. // 子类里面定义新的方法,与show无关系
  23. public function total()
  24. {
  25. return "$this->name, 总计: ". ($this->price * $this->num) . ' 元';
  26. }
  27. }

-实例化

  1. <?php
  2. require 'loader.php';
  3. // 20是子类继承父类添加的方法
  4. // 实例化子类sub
  5. $sub =new Sub('好面包',40,20);
  6. echo $sub->show();
  7. echo '<hr>';
  8. // 重新定义的方法,与父类无关系
  9. echo $sub->total();
  • trait类的方法集,单继承子类可以从trait引入方法进行继承
  1. <?php
  2. // 当父类,trait,与当前子类中存在同名成员的如何解决?
  3. // 父类
  4. class P
  5. {
  6. public function m1()
  7. {
  8. return __METHOD__;
  9. }
  10. }
  11. # trait像类不是类,想当于中介
  12. trait T
  13. {
  14. // public function m1()
  15. // {
  16. // return __METHOD__;
  17. // }
  18. }
  19. // 子类
  20. class A extends P
  21. {
  22. use T;
  23. // 在子类中将父类的m1进行了重写
  24. // public function m1()
  25. // {
  26. // return __METHOD__;
  27. // // return parent::m1();
  28. // }
  29. }
  30. // 当子类与父类存在同名成员时,子类优先
  31. echo (new A)->m1(), '<br>';
  32. // 当trait中存在与父类同名的成员时,trait优先
  33. // own > trait > parent
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