博客列表 >0115,PHP关于类的一些基础知识

0115,PHP关于类的一些基础知识

曾
原创
2020年02月11日 18:02:28601浏览

PHP类的基础知识

类的创建:类使用class命令创建,类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线,一个类可以包含有属于自己的常量、变量(称为“属性”)以及函数(称为“方法”)。
类的访问:类的访问需要先实例化,实例化命令为new+需要实例化的类名+(),访问需要使用成员指向符->

一.创建一个类

  1. <?php
  2. // 1.创建一个类
  3. class Demo1
  4. {
  5. // 2.添加类成员
  6. // 访问限制符 public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员
  7. public $site = 'php中文网';
  8. // 3.创建使用方法/函数
  9. public function getName()
  10. {
  11. // 要访问当前类中的属性(成员)需要先实例化
  12. // 实例化使用new然后跟上当前的类名+()
  13. // 实例化当前类,然后把这个操作赋值在$obj里面
  14. // $obj = new Demo1();
  15. // 在内部实例化可以使用self(它是当前类的引用),来访问当前类名,达到的效果是一样的
  16. $obj = new self();
  17. // 使用有实例化赋值的obj来访问类成员,并返回类成员的值
  18. // 使用成员指向符->访问类成员site
  19. return $obj->site;
  20. }
  21. // 方法/函数里面访问当前类成员的简化写法 $this(它是当前类的实例化缩写)(它等同于先实例化当前类$obj=new self())
  22. public function getInfo()
  23. {
  24. return $this->site;
  25. }
  26. }
  27. // 实例化当前类,然后把这个操作赋值在$obj里面
  28. $obj = new Demo1();
  29. // 使用有实例化赋值的obj来访问类成员
  30. echo $obj->site;
  31. echo '<br>';
  32. // 使用类里面的函数来访问,就是函数里面先实例化当前类,用当前类访问成员,然后获取其返回值,并输出
  33. echo 'getName的值为:'.$obj->getName();
  34. // 使用$this创建的方法,输出的结果是一样的
  35. echo '<br>getInfo的值为:'.$obj->getInfo();
  36. ?>

以上的输出结果都是一样的

二.成员限制符

成员限制符有3个:

1.public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员

  1. <?php
  2. <?php
  3. //创建类
  4. class Demo1
  5. {
  6. // 访问限制符
  7. // public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员
  8. public $site = 'php中文网';
  9. // 创建使用方法/函数
  10. public function getName()
  11. {
  12. // 要访问当前类中的属性(成员)需要先实例化
  13. // 实例化使用new然后跟上当前的类名+()
  14. // 实例化当前类,然后把这个操作赋值在$obj里面
  15. $obj = new Demo1();
  16. // 使用有实例化赋值的obj来访问类成员,并返回类成员的值
  17. return $obj->site;
  18. }
  19. }
  20. // 实例化当前类,然后把这个操作赋值在$obj里面
  21. $obj = new Demo1();
  22. // 外部直接访问类成员
  23. echo $obj->site;

外部访问成功

2.protected: 创建的类成员为私有成员,只能在类里面,或则字类继承里面才能访问

  1. <?php
  2. //1. 创建一个类
  3. class demo4
  4. {
  5. //2.添加类成员
  6. // protected: 创建的类成员为私有成员,只能在类里面,或则继承里面才能访问
  7. protected $info;
  8. //3.添加一个普通方法
  9. public function getInfo()
  10. {
  11. return $this->info;
  12. }
  13. //创建一个构造方法
  14. public function __construct($type)
  15. {
  16. $this->info = $type;
  17. }
  18. }
  19. // 创建一个继承类
  20. // extends:继承demo4的所有能访问的类与方法
  21. // 子类,除了继承,也可以有自己的类成员,与方法
  22. class sub extends demo4
  23. {
  24. //在子类里面创建一个方法/函数
  25. public function getInfo()
  26. {
  27. // parent:: 表示引用父类的某样数据
  28. // parent::getInfo() 表示引用父类的getInfo()方法,获取里面的内容,引用过后还可以添加内容
  29. // :: 双冒号为范围解析符
  30. return parent::getInfo().'学习';
  31. }
  32. // 创建一个子类的构造方法
  33. public function __construct($type)
  34. {
  35. //这里也可以使用parent::__construct来引用父类的构造方法
  36. //这里引用了父类的构造方法,所以传参,有一个要传递在引用的父类构造方法里面
  37. parent::__construct($type);
  38. }
  39. }
  40. // $obj = new demo4('php中文网');
  41. // 私有类成员,外部无法直接访问
  42. // echo $obj->info;
  43. // 通过指向方法来进行访问
  44. // echo $obj->getInfo();
  45. // 子类访问
  46. // 这里因为继承了构造方法,可以用子类直接赋值
  47. $sub = new sub('PHP课程');
  48. // protected 创建的类成员为私有成员,可以由子类继承,所以可以访问到
  49. echo $sub ->getInfo();

直接使用echo $obj->info在外部访问会报错

在类中访问或者子类继承以后访问都可以

3.private:添加为保密类,只能在当前类中访问,无法继承,外部不能访问

  1. <?php
  2. // 1.创建类
  3. class demo3
  4. {
  5. //2.创建类成员
  6. // private: 添加为保密类,只能在当前类中访问,无法继承,外部不能访问
  7. private $info;
  8. // 创建方法
  9. public function getInfo()
  10. {
  11. return $this->info;
  12. }
  13. public function __construct($type='hello word')
  14. {
  15. $this->info = $type;
  16. }
  17. }
  18. // $obj = new demo3();
  19. // 不能直接访问,显示错误
  20. // echo $obj->info;
  21. // 正确访问
  22. // echo $obj->getInfo();
  23. // 创建一个子类继承父类
  24. // extends:继承demo4的所有能访问的类与方法
  25. class sub extends demo3
  26. {
  27. public function getInfo()
  28. {
  29. return $this->info;
  30. }
  31. }
  32. $sub = new sub();
  33. // private创建的是保密成员,子类无法继承,也无法访问
  34. echo $sub->info;

因为父类的成员为保密类,子类不能继承到保密类成员,在输出的时候不会报错,但是也不会显示出内容。
保密类成员只能在它当前类中访问

构造方法__construct它是固定的用法不允许用户更改,添加。它不能主动调用/触发,只能通过new来调用/触发,每次调用有构造方法的类,都会先执行它,把类里面的属性初始化一次。

  1. <?php
  2. //创建类
  3. class Demo1
  4. {
  5. // 添加类成员
  6. // 访问限制符
  7. // public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员
  8. // public $site = 'php中文网';
  9. // 如果使用构造方法,这里就不用给变量/属性赋值
  10. public $site ;
  11. // 创建使用方法/函数
  12. public function getName()
  13. {
  14. // 方法/函数里面访问当前类成员的简化写法 $this(它是当前类的实例化缩写)(它等同于先实例化当前类$obj=new self())
  15. return $this->site;
  16. }
  17. public function getInfo()
  18. {
  19. return $this->site;
  20. }
  21. public function __construct($type)
  22. {
  23. $this->site = $type;
  24. }
  25. }
  26. // 使用了构造函数,在外部实例化的时候要传递参数进去
  27. $obj = new Demo1('hello word');
  28. // 使用有实例化赋值的obj来访问类成员
  29. echo $obj->site;
  30. echo '<br>';
  31. // 使用类里面的函数来访问,就是函数里面先实例化当前类,用当前类访问成员,然后获取其返回值,并输出
  32. echo 'getName的值为:'.$obj->getName();
  33. // 使用$this创建的方法,输出的结果是一样的
  34. echo '<br>getInfo的值为:'.$obj->getInfo();

结果为:

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