博客列表 >PHP 实例演示类与实例,类属性与类方法,类成员的访问控制, 类的扩展以及扩展的方式

PHP 实例演示类与实例,类属性与类方法,类成员的访问控制, 类的扩展以及扩展的方式

Dong.
Dong.原创
2020年09月01日 16:32:14841浏览

1.类的声明与实例化

  1. <?php
  2. // 类的声明与实例化
  3. // 1. 类的声明
  4. class Goods
  5. {
  6. // 类成员:
  7. // 1. 类属性
  8. // 2. 类方法
  9. public $a = 'abc';
  10. // 类的实例构造方法/器
  11. public function __construct()
  12. {
  13. }
  14. }
  15. // 2. 类的实例化: 就是创建对象的对象
  16. // 类中的构造方法必须用: new 来调用
  17. $goods = new Goods();
  18. var_dump($goods);
  19. var_dump($goods instanceof Goods);
  20. // 实例与对象,在不引起误会的场景下,可以通用
  21. // 动态类, 将类名称放在一个变量中
  22. $className = 'Goods';
  23. $obj = new $className();
  24. echo get_class($obj);

2.类属性与类方法

  1. <?php
  2. // 类中的方法
  3. class User
  4. {
  5. // public: 访问限定符,用来声明类成员的作用域
  6. // 类属性
  7. public $name = 'peter';
  8. public $age = 18;
  9. public static $nation = '码农';
  10. // 类方法
  11. public function write1()
  12. {
  13. // 访问类属性
  14. // 1. 实例化
  15. $user = new User;
  16. // 2 访问类成员
  17. return "姓名:{$user->name},年龄: {$user->age}";
  18. }
  19. // 类方法
  20. public function write2()
  21. {
  22. // 声明一个变量, 声明在方法中的变量,不是属性,是私有变量/局部变量
  23. $salary = 8000;
  24. // 访问类属性
  25. // 1. 实例化
  26. // 第一个问题: 类的名称被限定,使用self可以引用当前的类名称
  27. // $user = new self;
  28. // $this会自动创建, $this是只读的,不能被更新
  29. // $this = new self;
  30. // 2 访问类成员
  31. // 第二个问题: 类的实例,类中并不关心,它也只需要一个实例的引用就可以了
  32. // 引用当前类实例: $this
  33. return "姓名:{$this->name},年龄: {$this->age}, 工资 : {$salary}";
  34. // self: 类引用
  35. // $this: 类实例引用
  36. }
  37. // 类方法中访问(类)外部成员: 变量和函数
  38. public function write3()
  39. {
  40. // 调用外部函数
  41. $str = hello();
  42. // 外部变量
  43. return $str . $GLOBALS['username'];
  44. }
  45. // 实际项目中,外部成员应该通过方法参数注入到方法,而不是在方法中直接调用
  46. // 依赖注入
  47. public function write4(Closure $hello, string $username)
  48. {
  49. return $hello() . $username;
  50. }
  51. // 静态方法: 不依赖类实例,可以用类直接调用
  52. public static function write5()
  53. {
  54. // 静态成员属于类,不属性于类实例,所以不能使用类实例的引用$this
  55. // return "姓名:{$this->name},年龄: {$this->age}";
  56. return "工作: " . self::$nation;
  57. }
  58. // 普通方法中可以访问静态成员, 而反之不行
  59. public function write6()
  60. {
  61. return "工作: " . self::$nation;
  62. }
  63. }
  64. // 客户端代码
  65. $user = new User;
  66. echo $user->write1();
  67. echo '<hr>';
  68. echo $user->write2();
  69. // 外部函数
  70. function hello()
  71. {
  72. return 'Hello ';
  73. }
  74. // 匿名函数
  75. $hello = function ()
  76. {
  77. return 'Hello ';
  78. };
  79. // 外部变量
  80. $username = '灭绝老师';
  81. echo '<hr>';
  82. echo $user->write3();
  83. echo '<hr>';
  84. echo $user->write4($hello, $username);
  85. echo '<hr>';
  86. echo $user->write5();
  87. echo '<hr>';
  88. echo $user->write6();

3.类成员的访问控制

  1. <?php
  2. // 类成员的访问控制
  3. class User
  4. {
  5. // public:公共成员,默认值
  6. public $name = "peter";
  7. // private:私有成员,只能本类内部使用,外部和子类都不可以
  8. private $age = 20;
  9. // protected:受保护成员,外部不能用,内部和子类都可以
  10. protected $salary = 9500;
  11. // 类内部访问
  12. public function write()
  13. {
  14. echo $user->salary;
  15. return "姓名:{$this->name}, 年龄:{$this->age}, 工资:{$this->salary}";
  16. }
  17. }
  18. // 子类,只有public和protected可见
  19. class Rob extends User
  20. {
  21. public function write()
  22. {
  23. return "姓名:{$this->name}, 工资:{$this->salary}";
  24. }
  25. }
  26. // 1.类的外部访问
  27. $user = new User;
  28. echo $user->name;
  29. // 2.类内部访问
  30. echo '
  31. ';
  32. echo $user->write();
  33. // 3.访问子类
  34. echo '
  35. ';
  36. echo (new Rob)->write();
  37. // 4.类的私有成员,年龄private:私有成员 只能本类内部使用,外部和子类都不可以
  38. // 5.protected:受保护成员,外部不能用,内部和子类都可以

4.类的扩展以及扩展方法

  1. <?php
  2. // 类的继承或扩展
  3. // 变量是数据复用,函数是代码复用,继承是类的复用
  4. // final class User:类禁止扩展
  5. class User
  6. {
  7. protected $name = 'peter';
  8. // 方法
  9. // final public function write()方法禁止重写
  10. public function write()
  11. {
  12. return "姓名:{$this->name}";
  13. }
  14. }
  15. // 扩展类/子类
  16. class Rob extends User
  17. {
  18. // 1.扩展
  19. // 属性扩展
  20. protected $age = 18;
  21. // 方法扩展
  22. public function write()
  23. {
  24. return parent::write() . ", 年龄:{$this->age}";
  25. }
  26. // 2.重写
  27. // 属性重写
  28. // protected $name = '小明';
  29. // 方法重写
  30. // public function write()
  31. // {
  32. // return "{$this->name} : {$this->age} 岁";
  33. // }
  34. }
  35. // 调用
  36. $rob = new Rob;
  37. echo $rob->write();

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