博主信息
博文 40
粉丝 0
评论 1
访问量 50047
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP 实例演示类与实例,类属性与类方法,类成员的访问控制, 类的扩展以及扩展的方式
Dong.
原创
1086人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学