Blogger Information
Blog 18
fans 0
comment 0
visits 10893
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类的封装,继承,多态
手机用户1631860753
Original
665 people have browsed it

一.类

  • 面向对象:oop :是有下往上,要先把类写好,然后在写流程的时候提取类使用
  • 以前学习的代码是一行一行往下执行的,所以是由上往下
  • 类,有两个部分组成:成员属性(变量)和成员方法(函数)
  • 根据类创建出来的对象,就是对象,每个对象都是独一无二的
  • 我们写类的时候,一个类,要给一个文件,而且文件名,要和class类名一样,
  • 访问修饰符,有三个:

    public 公用的
    protected 受保护的,在外面不能直接访问
    private 私有的

  • PHP的oop面向对象开发,它的三大特性:封装,继承,多态

  • require_once 加载,可以加载引入类使用

1.封装

-创建类

  1. class A
  2. {
  3. // 成员属性
  4. // 公开的,外部可以访问
  5. public $name;
  6. public $id = 123; // 给默认值
  7. // 受保护的,在外面不可以访问,但是可以继承
  8. protected $salary;
  9. // 私有的,只能本类(我)自己调用,子类都继承不了的
  10. private $password;
  11. // 构造方法,专门给受保护的属性,给与重新赋值,构造方法也是可以继承的
  12. public function __construct($a, $b, $c, $d)
  13. {
  14. $this->name = $a;
  15. $this->id = $b;
  16. $this->salary = $c;
  17. $this->password = $d;
  18. }
  19. // 可以通过 __construct 方法里,把其他属性通过用户传过来
  20. public function bldy()
  21. {
  22. return "我的名字叫:{$this->name},我的id是:{$this->id},我的工资是:{$this->salary},我的密码是:{$this->password}";
  23. }
  24. // 方法在本类里调用 用 $this 代表本类和英文里的 my一个意思
  25. public function dy()
  26. {
  27. return $this->bh() . ',另外:' . $this->sy();
  28. }
  29. // 成员方法 可以公开的
  30. public function gk()
  31. {
  32. return '这里可以写很多代码,进行功能处理,和函数一样,也可以写返回的数据类型';
  33. }
  34. // 成员方法,受保护的
  35. protected function bh()
  36. {
  37. return '这个方法是受保护的,可以继承';
  38. }
  39. // 成员方法,私有的
  40. private function sy()
  41. {
  42. return '私有的,子类是继承不了的';
  43. }
  • 引用类
    1. require_once 'A.php'; // 引用创建的 A 类
    2. // 这个类创建出来,给不能访问的属性,添加默认值
    3. $obj = new A('晋阳', '123', '5000', '123456');
    4. echo $obj->name; // name 是公开的,所以可以输出
    5. echo '<hr>';
    6. echo $obj->id;
    7. echo '<hr>';
    8. echo $obj->salary; // 受保护的,在外部不能调用,所以报错
    9. echo '<hr>';
    10. echo $obj->password; // 私有的,只能自己使用,所以报错
    11. echo '<hr>';
    12. echo $obj->bldy(); // 受保护的和私有的在外部不能访问,但是可以自己调用出来
    13. echo '<hr>';
    14. echo $obj->dy(); // 在本类中可以用$this调用方法

2.继承

  • 子类继承父类的功能,那子类就有父类的功能可以少写很多代码,
  • 继承的关键词:extends
  • 子类继承父类是所有属性,除了私有的继承不了,
  • 子类还可以在父类的基础上进行功能扩展
  • 如果子类方法的名字,和父类的名字冲突了,就相当于重写
  • 子类中变量重写可以在构造方法里进行重写赋值
  • 当子类重写父类的方法时,如果还想用父类的方法,可以用 parent:: 进行调用
  • 传值的属性,是先传给子类,如果子类里面有构造方法先使用了它,它就优先用子类的构造方法,替换掉父类的构造方法

  • 创建子类

    1. require_once 'A.php';
    2. // B 类,继承 A类
    3. class B extends A
    4. {
    5. // 可以在父类的基础上进行扩展
    6. // public $age;
    7. // 可以重写构造方法,对属性进行重新赋值
    8. // public function __construct($age)
    9. // {
    10. // $this->age = $age;
    11. // }
    12. // 受保护的属性在子类里也可以调用,但是要在子类里面使用
    13. public function get_salary()
    14. {
    15. return '父类的工资是:' . $this->salary;
    16. }
    17. // 子类和父类都有 bldy 重复了,可以用 parent:: 调用父类的 bldy
    18. public function bldy()
    19. {
    20. return parent::bldy() . ',这是从B类里传出来的';
    21. }
    22. }
  • blay在子类调用

3.类的自动调用

  • 函数:spl_autoload_register 自动加载
  • 自动调用类的时候,会自动找到对应的文件名
  • 实现自动加载,所有文件名和类名要保持一致,
  • class 后面的类名,要和文件名一样,自动加载才能找到进行调用
  • 创建类的自动加载
  1. spl_autoload_register(
  2. function ($className) {
  3. // $className 是new的B这个名字,这个名字是类名,不是文件名
  4. require_once $className . '.php';
  5. }
  6. );

4.不能继承

  • 不给重写,关键词:final 加在public前面,让这个方法不能重写,只能用我这个,或者修改名字
  • 把 final 写在 class 前面那么这个类就不能被继承

  • 不能继承

  1. // final 写在 class前面这个类就不能被继承
  2. final class C
  3. {
  4. public $name;
  5. public $id;
  6. protected $salary;
  7. private $password;
  8. public function __construct($a, $b, $c, $d)
  9. {
  10. $this->name = $a;
  11. $this->id = $b;
  12. $this->salary = $c;
  13. $this->password = $d;
  14. }
  15. // final 写在方法前面,那么这个方法就不能被修改
  16. final public function bldy()
  17. {
  18. return "我的名字叫:{$this->name},我的id是:{$this->id},我的密码是:{$this->password},我的工资有:{$this->salary}";
  19. }
  20. }

5.静态成员

  • 静态成员的关键词:static 可以给属性(变量),也可以给方法
  • 静态成员用 self:: 代表本类
  • 静态成员可以给属性默认值.但是不能给方法默认值,
  • 如果这个属性和方法是静态的,就不要用原始的访问方式了
  • 静态成员访问方式,用类名::属性名,类名::方法名()

  • 一个类,不用实例就能使用里面的属性和方法.

  • 没有对象也能使用静态成员
  • 静态成员,变量访问,变量要加 $ 符号
  • 静态成员由本类掉用,为所有实例共享

  • 静态类

  1. class Shop
  2. {
  3. // 静态属性
  4. public static $title;
  5. public $price;
  6. public $num1 = 1;
  7. public static $num2 = 2;
  8. public function __construct($t, $p)
  9. {
  10. $this->title = $t;
  11. $this->price = $p;
  12. $this->num1++; // 普通变量,都是从头开始计算
  13. // self:: 代表静态成员的本类
  14. self::$num2++; // 静态成员,只要是调用了,就会增加1
  15. }
  16. // 静态方法
  17. public static function cartoon()
  18. {
  19. return '使用' . Shop::$title;
  20. }
  21. }
  • 调用

    1. Shop::$title = '苹果13Pro'; // 赋值
    2. echo Shop::$title;
    3. echo '<hr>';
    4. echo Shop::cartoon();
    5. echo '<hr>';
    6. echo Shop::$num2;
  • 输出

Correcting teacher:PHPzPHPz

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