Blogger Information
Blog 48
fans 3
comment 1
visits 30351
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类与对象及命名空间初步
吴长清
Original
342 people have browsed it

1.类与对象

1.1 类的扩展(继承)

关键字extends

  1. <?php
  2. namespace _0815;
  3. /**
  4. * 学生类
  5. */
  6. class Student
  7. {
  8. //公共属性 类中、类外、子类皆可以使用
  9. public int $age;
  10. //受保护的 类中、子类中可以使用
  11. protected string $name;
  12. //私有属性 只能在类中使用
  13. private int $id = 101;
  14. // 构造方法
  15. public function __construct($name)
  16. {
  17. $this->name = $name;
  18. }
  19. //自定义方法 受保护的 只能在子类中使用扩展
  20. protected function getInfo(): string
  21. {
  22. return '父类私有属性=>id: ' . $this->id . ',<br>父类公共属性=> 姓名: ' . $this->name;
  23. }
  24. }
  25. /**
  26. * 小学生类 继承 学生类
  27. * 对学生类进行扩展
  28. */
  29. class PrimarySchool extends Student
  30. {
  31. // 属性扩展
  32. private string $lesson;
  33. private int $score;
  34. // 构造方法扩展
  35. public function __construct($name, $lesson, $score)
  36. {
  37. // parent: 引用父类的构造方法
  38. parent::__construct($name);
  39. $this->lesson = $lesson;
  40. $this->score = $score;
  41. }
  42. // 子类中对自定义方法扩展
  43. // 若是父类的关键字是protected,那么子类关键字只能时public和protected
  44. // 若是父类的关键字是public,那么子类关键字只能是public
  45. public function getInfo(): string
  46. {
  47. return parent::getInfo() . ', <br> 子类扩展=> 课程: ' . $this->lesson . ', 成绩: ' . $this->score;
  48. }
  49. }
  50. $primarySchool = new PrimarySchool('张国', '数学', 90);
  51. echo $primarySchool->getInfo();

1.2 类的抽象

关键字abstract

  1. <?php
  2. namespace _0815;
  3. /**
  4. *
  5. * 声明抽象类:abstract
  6. * 只要是抽象类,其父类中的属性和方法不能直接访问,必须通过子类扩展后访问
  7. * 如果类中有抽象方法。则这个类必须声明为抽象类
  8. */
  9. abstract class Demo1
  10. {
  11. public string $name;
  12. // 如果某个方法没有具体实现(只声明未实现),应该声明成抽象方法
  13. abstract public static function getInfo($name);
  14. }
  15. /**
  16. * 若父类时抽象类,子类扩展时必须将父类的抽象方法实现,否则报错
  17. */
  18. class Demo2 extends Demo1
  19. {
  20. // 实现父类抽象类的方法
  21. public static function getInfo($name)
  22. {
  23. return 'Hello, ' . $name;
  24. }
  25. }
  26. // 输出结果 Hello,张三
  27. echo Demo2::getInfo('张三');

关键字final 只要声明为final的类,是不可以继承扩展的

  1. final class Demo3
  2. {
  3. //代码块
  4. }

1.3 接口

关键字interface 接口命名规则:小写的i开头加类名,如:iUser iStu
关键字implements 实现接口

  1. <?php
  2. namespace _0815;
  3. //接口
  4. interface iUserInfo
  5. {
  6. //常量
  7. public const NATION = 'China';
  8. //方法 没有具体实现
  9. public function getInfo();
  10. public function m2();
  11. }
  12. // 接口实现类
  13. class UserInfo implements iUserInfo
  14. {
  15. public string $name = '张三';
  16. //必须实现接口类中的所有方法
  17. public function getInfo():string
  18. {
  19. return 'Hello, ' . $this->name;
  20. }
  21. public function m2()
  22. {
  23. }
  24. }
  25. $userInfo = new UserInfo();
  26. // 输出结果 Hello,张三
  27. echo $userInfo->getInfo();

2.命名空间

2.1 全局成员

全局成员包含函数 常量 类/接口
特点:全局可使用,禁止重复声明

2.2 命名空间

命名空间的作用
是为了解决全局变量命名冲突的问题
类似同一个目录不允许同名文件存在,但是可以通过新建目录的方式来解决

声明方式
关键字:namespace 命名空间名称

跨空间成员的访问方式

  1. <?php
  2. //命名空间:_0815_one
  3. namespace _0815_one;
  4. function getInfo(): string
  5. {
  6. return __METHOD__ . '<br>';
  7. }
  8. // 1. 当前路径: 非限定名称, 访问当前空间内的方法: getInfo()
  9. echo '当前路径: ' . getInfo();
  10. // 跨空间请求
  11. // 2. 相对路径: 限定名称, 跨空间访问:two\Index::getInfo()
  12. echo '跨空间访问-相对路径: ' . two\Index::getInfo();
  13. // 3. 绝对路径: 完全限定名称, 跨空间访问: \_0815_one\two\Index::getInfo()
  14. echo '跨空间访问-绝对路径: ' . \_0815_one\two\Index::getInfo();
  15. // 4. 别名访问
  16. use \_0815_one\two\Index as indexInfo;
  17. echo '跨空间访问-别名访问: ' . indexInfo::getInfo();
  18. //命名空间:_0815_one\two
  19. namespace _0815_one\two;
  20. class Index
  21. {
  22. public static function getInfo(): string
  23. {
  24. return __METHOD__ . '<br>';
  25. }
  26. }
  27. echo Index::getInfo();

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