博客列表 >PHP类的声明和命名空间

PHP类的声明和命名空间

Pharaoh
Pharaoh原创
2022年08月18日 09:38:38422浏览

类的声明

  • 抽象类声明 abstract class Name ; 继承 extends 关键字
  • 接口类声明 interface Name ; 继承 implements 关键字
  • 最终类声明 final class Name ; 不能继承
  1. class 类名 {
  2. // 类成员
  3. public $name; // 公有成员,可以在类的外部,内部使用
  4. private $num = 0; // 私有成员,只能在类内部使用
  5. protected $price = 1000; // 保护成员,只能在类内,子类使用
  6. // 公有方法
  7. public function getName () {
  8. echo $this -> name;
  9. }
  10. // 获取器:__get 魔术方法
  11. public function __get ($name) {
  12. return $this->$name;
  13. }
  14. // __set和__get魔术方法在对象访问私有属性时自动触发
  15. // 设置器 __set(变量,值)
  16. public function __set ($name,$value) {
  17. $this->$name = $value;
  18. }
  19. // 静态属性 只能通过类访问对象实例化时自动触发
  20. static $classname;
  21. // 静态方法
  22. public static function getClassName () {
  23. echo 类名魔术常量;
  24. }
  25. }

抽象类

  1. abstract class Demo1 {
  2. protected $name = 'administrator';
  3. static $classname = 'Demo';
  4. // abstract 抽象声明,结尾必须分号;
  5. // 必须在子类中重写实现抽象方法
  6. abstract public static function show($na);
  7. }
  8. class Demo2 extends Demo1 {
  9. public static function show($na) {
  10. return $na;
  11. }
  12. }

接口类

  1. // interface接口类 :升级版的抽象类
  2. interface Demo {
  3. // 常量
  4. public const NAME = 'demo';
  5. // 方法public
  6. public function show();
  7. public function get();
  8. }
  9. // 工作类
  10. class Demo1 implements Demo {
  11. // 接口父类中的抽象方法,必须在子类中全部实现
  12. public function show() {
  13. // .....
  14. }
  15. public function get() {
  16. // .....
  17. }
  18. }
  19. // 如果子类中只实现了一部分方法,应该声明为抽象类
  20. abstract class Demo2 implements Demo {
  21. public function show() {
  22. // .....
  23. }
  24. }
  25. // php是单继承
  26. interface A {
  27. // .....
  28. }
  29. interface B {
  30. // .....
  31. }
  32. interface C {
  33. // .....
  34. }
  35. // 可以从多个接口类获取成员,实现多继承
  36. class D implements A,B,C {
  37. // .....
  38. }

命名空间

全局成员:函数,常量,类和接口全局有效,不能重复声明

命名空间解决了命名冲突

  1. namespace one;
  2. function demo() {
  3. return '123';
  4. }
  5. echo demo() . '<br>'; // 当前路径:非限定名称demo()
  6. echo two\demo() . '<br>'; // 相对路径:限定名称two\demo()
  7. echo \one\two\three\demo() . '<br>'; // 绝对路径:完全限定名称\one\two\three\demo();
  8. // 空间分层
  9. namespace one\two;
  10. function demo() {
  11. return '321';
  12. }
  13. // 空间分层
  14. namespace one\two\three;
  15. function demo() {
  16. return '7654321';
  17. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议