博主信息
博文 20
粉丝 0
评论 0
访问量 19970
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php学习笔记(类声明,类的实例化,类的静态成员与类的扩展)
庖丁
原创
985人浏览过

1. 类声明 class

  1. <?php
  2. //声明一个类文件,使用关键字class 后面跟类名,建议首字母大写
  3. class Customer
  4. {
  5. private $name;
  6. private $phone;
  7. private $adress;
  8. //构造方法(系统自动调用的,作用是将属性实例化)
  9. function __construct($name, $phone, $adress)
  10. {
  11. $this->name = $name;
  12. $this->phone = $phone;
  13. $this->adress = $adress;
  14. }
  15. function show()
  16. {
  17. return "{$this->name}的送货地址为{$this->adress},电话号码为{$this->phone}";
  18. }
  19. }

1.1 类的实例化 new

  1. $zhangsan = new Customer('张三',136123456,'石家庄');
  2. echo $zhangsan->show();

1.2 类的静态成员 static

  1. <?php
  2. //声明一个类文件,使用关键字class
  3. class Customer
  4. {
  5. static $name;
  6. static $phone;
  7. static $adress;
  8. //利用构造方法给静态函数传参
  9. public function __construct($name,$phone,$adress)
  10. {
  11. //在类内部调用类的静态成员要用self
  12. self::$name = $name;
  13. self::$phone = $phone;
  14. self::$adress = $adress;
  15. }
  16. static function show(){
  17. return'顾客'.self::$name .'的地址为'.self::$adress.',电话号码为'.self::$phone;
  18. }
  19. }
  20. $user = new Customer('张三','123456','石家庄');
  21. //在类的外部访问静态成员,需要使用类名的方式访问
  22. echo Customer::show();

1.3 类的扩展 extends

  1. <?php
  2. //声明一个类文件,使用关键字class 后面跟类名,建议首字母大写
  3. class Customer
  4. {
  5. protected $name;
  6. protected $phone;
  7. //构造方法(系统自动调用的,作用是将属性实例化)
  8. function __construct($name, $phone)
  9. {
  10. $this->name = $name;
  11. $this->phone = $phone;
  12. }
  13. function show()
  14. {
  15. return "{$this->name}的电话号码为{$this->phone}";
  16. }
  17. }
  18. //声明一个子类
  19. class SonCustomer extends Customer
  20. {
  21. private $adress;
  22. //类的功能扩展1:重写父类的方法 __construct()(构造器)
  23. function __construct($name, $phone, $adress)
  24. {
  25. parent::__construct($name, $phone);
  26. $this->adress = $adress;
  27. }
  28. //类的功能扩展1:重写父类的方法show()
  29. function show()
  30. {
  31. return parent::show().',送货地址为'.$this->adress;
  32. }
  33. //类的功能扩展2:添加新功能
  34. function adress(){
  35. return '送货地址为'.$this->adress;
  36. }
  37. }
  38. //子类实例化
  39. $lisi = new SonCustomer('李四','456789','北京');
  40. echo $lisi->show();
  41. echo $lisi->adress();

2. 描述trait功能

类似于函数库(公共方法集),功能是代码复用。借用了类的方法,但是不能实例化。
在需要引用trait的类中,用关键字use引用它即可。

2.1 trait与父类的区别与联系

当trait中的成员名与父类、子类重名时
优先级 子类>trait>父级

  1. <?php
  2. class Mm{
  3. function name(){
  4. return '这里是父类的name方法';
  5. }
  6. }
  7. trait A1{
  8. function name(){
  9. return '这里是trait A1的name方法';
  10. }
  11. }
  12. class Xingming extends Mm
  13. {
  14. use A1;
  15. }
  16. // 输出 这里是trait A1的name方法
  17. echo (new Xingming)->name();
  18. class Xingming2
  19. {
  20. use A1;
  21. function name(){
  22. return '这里是子类的name方法';
  23. }
  24. }
  25. // 输出 这里是trait A1的name方法
  26. echo (new Xingming2)->name();

2.2 trait 的冲突与优先级的解决方案

当多个trait成员引用时,发生命名冲突,解决方法:使用优先级+别名

  1. <?php
  2. trait A1{
  3. function name(){
  4. return '这里是trait A1的name方法';
  5. }
  6. }
  7. trait A2{
  8. function name(){
  9. return '这里是trait A2的name方法';
  10. }
  11. }
  12. class Xingming{
  13. use A1,A2{
  14. //给A1的name()方法设置优先级
  15. A1::name insteadOf A2;
  16. //给A2的name()方法名设置别名
  17. A2::name as a2name;
  18. }
  19. }
  20. // 输出 这里是trait A1的name方法
  21. echo (new Xingming)->name();
  22. // 输出 这里是trait A2的name方法
  23. echo (new Xingming)->a2name();
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学