Blogger Information
Blog 30
fans 0
comment 1
visits 24079
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0115,PHP关于类的一些基础知识
Original
600 people have browsed it

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();

结果为:

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