博客列表 >php基础类的访问权限、类继承、抽象类、接口类

php基础类的访问权限、类继承、抽象类、接口类

῀℡῀ᵒᵐᵍᵎᵎᵎ
῀℡῀ᵒᵐᵍᵎᵎᵎ原创
2020年04月29日 16:43:091004浏览

1.类访问控制

按访问权限分类

序号 名称 关键字 类外部 类内部 类继承上下文 描述
1 公开成员 public 允许 允许 允许 默认
2 受保护成员 protected 禁止 允许 允许 封装
3 私有成员 private 禁止 允许 禁止 封装

1 public、类继承

1.1public

  • 这个就是没有限制的,公有的

    1.1.1代码演示

    1. <?php
    2. //public公共的
    3. class Person{
    4. public $name = 'misszhu'; //此处不定义默认值,那么默认是空null
    5. public $age = 18;
    6. public function say() {
    7. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
    8. }
    9. }
    10. $misszhu = new Person();
    11. // $misszhu -> name='misszhang';//public这种情况下名字是可以去更改的
    12. //echo $misszhu -> say();
    13. //在public下$name/$age都是可以在外部更改的
    14. $misszhu -> name='misszhang';
    15. $misszhu -> age='21';
    16. echo $misszhu -> say();

    1.2类继承

  • 这时候的类继承是没有显示的

1.2.1代码演示

  1. <?php
  2. //类的继承
  3. //子类共享父类的属性和方法(protected/public)
  4. //php中只支持单继承
  5. class Person{
  6. public $name; //此处不定义默认值,那么默认是空null
  7. public $age;
  8. public function __construct($name, $age)
  9. {
  10. $this->name=$name;
  11. $this->age=$age;
  12. }
  13. public function say()
  14. {
  15. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  16. }
  17. public function demo()
  18. {
  19. echo '这里是demo';
  20. }
  21. }
  22. class Chiness extends Person{
  23. protected $sex;
  24. public function __construct($name, $age, $sex)
  25. {
  26. $this->name=$name;
  27. $this->age=$age;
  28. $this->sex=$sex;
  29. }
  30. //也是可以重写的
  31. }
  32. $misszhu = new Chiness($name='misszhang', $age='19', $sex='女');
  33. $misszhu -> say();
  34. var_dump($misszhu);

1.2.2演示截图


2 protected、类继承

2.1protected

  • 受保护的

    2.1.1代码演示

  1. <?php
  2. //protected:受保护的
  3. class Person{
  4. public $name = 'misszhu'; //此处不定义默认值,那么默认是空null
  5. protected $age = 18;
  6. public function say() {
  7. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  8. }
  9. }
  10. $misszhu = new Person();
  11. $misszhu -> name='misszhang';//public这种情况下名字是可以去更改的
  12. $misszhu -> age='28';//受保护的外部不能更改,会报错
  13. $misszhu -> say();

2.1.2演示截图

2.2.1 类继承

  1. <?php
  2. //类的继承
  3. //子类共享父类的属性和方法(protected/public)
  4. //php中只支持单继承
  5. class Person{
  6. public $name='misszhu'; //此处不定义默认值,那么默认是空null
  7. protected $age='18';
  8. public function say()
  9. {
  10. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  11. }
  12. public function demo()
  13. {
  14. echo '这里是demo';
  15. }
  16. }
  17. class Chiness extends Person{
  18. }
  19. $misszhu = new Chiness();
  20. //$misszhu -> age = 21;
  21. //$misszhu -> eat();
  22. $misszhu -> say();

2.2.2演示截图

  • 这时候是可以继承父类的

    2.3.1 但在外部能不能操作 代码演示

  1. <?php
  2. //类的继承
  3. //子类共享父类的属性和方法(protected/public)
  4. //php中只支持单继承
  5. class Person{
  6. public $name='misszhu'; //此处不定义默认值,那么默认是空null
  7. protected $age='18';
  8. public function say()
  9. {
  10. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  11. }
  12. public function demo()
  13. {
  14. echo '这里是demo';
  15. }
  16. }
  17. class Chiness extends Person{
  18. }
  19. $misszhu = new Chiness();
  20. $misszhu -> age = 21;
  21. //$misszhu -> eat();
  22. $misszhu -> say();

2.3.2演示截图

  • 演示报错说明不能在外操作

3 private、类继承

3.1代码演示

  1. <?php
  2. //类的继承
  3. //子类共享父类的属性和方法(protected/public)
  4. //php中只支持单继承
  5. class Person{
  6. public $name='misszhu'; //此处不定义默认值,那么默认是空null
  7. private $age='18';
  8. public function say()
  9. {
  10. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  11. }
  12. public function demo()
  13. {
  14. echo '这里是demo';
  15. }
  16. }
  17. class Chiness extends Person{
  18. public function eat(){
  19. echo $this->age;
  20. }
  21. }
  22. $misszhu = new Chiness();
  23. $misszhu -> say();

3.1.1演示截图

  • 证明类的内部是可以搞的

3.2.2 那么子类的内部能不能搞呢 代码演示

  1. <?php
  2. //类的继承
  3. //子类共享父类的属性和方法(protected/public)
  4. //php中只支持单继承
  5. class Person{
  6. public $name='misszhu'; //此处不定义默认值,那么默认是空null
  7. private $age='18';
  8. public function say()
  9. {
  10. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  11. }
  12. public function demo()
  13. {
  14. echo '这里是demo';
  15. }
  16. }
  17. class Chiness extends Person{
  18. public function eat(){
  19. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  20. }
  21. }
  22. $misszhu = new Chiness();
  23. $misszhu -> eat();

3.3.3演示截图

  • 截图表示没有报错,但是age没有继承下来,说明子类继承父类就不能继承父类私有的

抽象类的作用与实现

序号 名称 关键字 具体实现
抽象成员 abstract
  • 抽象类不能被实例化,同样方法也没有实现,只是提供方法声明,没有具体实现。抽象类只能作为其他类的父类使用。抽象类使用abstract关键字来声明

抽象类代码演示

  1. <?php
  2. abstract class Person{
  3. abstract function chiness($name,$age,$money);
  4. }
  5. class Person1 extends Person{
  6. function chiness($name,$age,$money)
  7. {
  8. echo "我的名字是:" . $name, "我现在是:" . $age. "岁了", "我兜兜里面有:" . $money."元";
  9. }
  10. }
  11. class Person2 extends Person{
  12. function chiness($name,$age,$money)
  13. {
  14. echo "我的名字是:" . $name, "我现在是:" . $age. "岁了", "我兜兜里面有:" . $money."元";
  15. }
  16. }
  17. $chiness1 = new Person1();
  18. $chiness2 = new Person2();
  19. $chiness1->chiness('zhu老师','42','1000000');
  20. echo '<hr/>';
  21. $chiness2->chiness('小zhou','27','1');

抽象类演示截图


4 类的重载和调用父类方法 代码演示

  1. <?php
  2. class Person{
  3. public $name = 'misszhu'; //此处不定义默认值,那么默认是空null
  4. public $age = 42;
  5. public function say() {
  6. echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
  7. }
  8. }
  9. class Chiness extends Person{
  10. public function sex()
  11. {
  12. //调用父类的方法,如果自己有方法就用自己的方法
  13. parent::say();
  14. }
  15. //类的重载,你如果觉得父类的不够先进,你也可以自己重新写
  16. public $eat='肉';
  17. public function eat()
  18. {
  19. echo '我的名字是'. $this->name. '今年'. $this->age.'岁', '我的爱好是喜欢吃'.$this->eat;
  20. }
  21. }
  22. $misszhu = new Chiness();
  23. echo $misszhu -> sex();
  24. echo '<hr>';
  25. echo $misszhu -> eat();

4.1演示截图


5 php 接口类的使用

  1. <?php
  2. interface iUser {
  3. const NAME = '接口类';
  4. public static function myfun(); //抽象方法
  5. }
  6. class User extends iUser
  7. {
  8. protected static $name = '小zhou';
  9. public static function myfun()
  10. {
  11. return $this->name.'正在学习'.iUser::NAME;
  12. }
  13. }
  14. echo User::myfun();

学习总结

有点绕,很多还没有总结到

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议