博客列表 >声明类,实例化,类属性,类方法,类中成员访问控制,类扩展及方式-php-24课7.21

声明类,实例化,类属性,类方法,类中成员访问控制,类扩展及方式-php-24课7.21

希望
希望原创
2020年07月22日 20:37:59710浏览

一、类的声明与实例化

1. 类成员:1.类属性, 2.类方法

  • 实例就是对象,实例与对象在不引起误会的场景下,可以通用
  • 类中的构造方法用new来调用
  • 动态类:将类名称放在一个变量中

  1. <?php
  2. class Goods
  3. {
  4. public $a = 1;
  5. public function __construct()
  6. {
  7. }
  8. }
  9. $goods = new Goods();
  10. var_dump($goods);
  11. // var_dump($goods instanceof Goods);
  12. // 动态类:将类名称放在一个变量中
  13. // $className = 'Goods';
  14. // $obj = new $className();

2. 类中的成员访问:public function write()、echo $user->write();

  1. <?php
  2. // 类中的方法
  3. class User
  4. {
  5. // 1.类属性
  6. public $name = "小芳";
  7. public $age = "20";
  8. public static $nation = 'CHINA';
  9. // 2.类方法
  10. public function write1()
  11. {
  12. // 访问类属性
  13. // 1.实例化,User是写死
  14. $user = new User;
  15. // 2.访问类成员
  16. return "姓名:{$user->name},年龄:{$user->age}";
  17. }
  18. public function write2()
  19. {
  20. // 声明了一个变量,工资1万,它不是属性,是私有变量,局部变量
  21. $salary = 10000;
  22. // 访问类属性
  23. // 1.实例化
  24. // 问题1:类的名称被限定,使用self可以引用当前的类名称
  25. $user = new self;
  26. // $this会自动创建,$this = new self;
  27. // 2.访问类成员
  28. // 问题2:类的实例,只需要一个实例的引用
  29. // 引用当前类的实例:$this
  30. return "姓名:{$this->name},年龄:{$this->age}, 工资:{$salary}";
  31. }
  32. // 类方法中访问 类的外部成员:变量和函数
  33. public function write3()
  34. {
  35. // 调用外部函数
  36. $str = hello();
  37. // 调用外部变量GLOBALS
  38. return $str . $GLOBALS['username'];
  39. }
  40. // 实际项目中,外部成员应该通过方法参数注入到方法,而不是在方法中直接调用
  41. // 依赖注入
  42. public function write4(Closure $hello, string $username)
  43. {
  44. // 调用外部函数和变量
  45. return $hello() . $username;
  46. }
  47. // 静态方法:用类直接调用,只能访问静态成员,国籍
  48. public static function write5()
  49. {
  50. return "国籍:" . self::$nation;
  51. }
  52. }
  53. // 客户端代码
  54. $user = new User;
  55. echo $user->write1();
  56. echo '<hr>';
  57. echo $user->write2();
  58. echo '<hr>';
  59. // 外部函数
  60. function hello()
  61. {
  62. return 'word';
  63. }
  64. $hello = function () {
  65. return 'word';
  66. };
  67. // 外部变量
  68. $username = '小刘';
  69. echo $user->write3();
  70. echo '<hr>';
  71. echo $user->write4($hello, $username);
  72. echo '<hr>';
  73. echo $user->write5();

3. 类成员的访问控制

  1. <?php
  2. // 类成员的访问控制
  3. class User
  4. {
  5. // public:公共成员,默认值
  6. public $name = "小芳";
  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 '<hr>';
  31. echo $user->write();
  32. // 3.访问子类
  33. echo '<hr>';
  34. echo (new Rob)->write();
  35. // 4.类的私有成员,年龄private:私有成员 只能本类内部使用,外部和子类都不可以
  36. // 5.protected:受保护成员,外部不能用,内部和子类都可以

4. 类的继承/扩展,及方法

  1. <?php
  2. // 类的继承或扩展
  3. // 变量是数据复用,函数是代码复用,继承是类的复用
  4. // final class User:类禁止扩展
  5. class User
  6. {
  7. protected $name = '小李';
  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 = 30;
  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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议