Blogger Information
Blog 20
fans 0
comment 0
visits 14962
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php学习笔记(类声明,类的实例化,类的静态成员与类的扩展)
庖丁
Original
744 people have browsed it

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();
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post