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();

更多相关文章

  1. 定义一个接口和抽象类
  2. python单下划线开头和双下划线开头的方法和属性
  3. 面向对象封装,继承,加载器
  4. 接口和抽象类
  5. 类声明与实例化、类的静态成员与类的扩展、trait与父类区别联系
  6. 面向对象编程基础
  7. 接口和抽象类的实现-区别与联系
  8. PHP面向对象编程
  9. 类声明-实例化-成员-继承-trait特征类

随机推荐

  1. Android IPC 通讯机制源码分析 二
  2. android典型代码系列(一)------android调
  3. Android中OkHttp的使用
  4. Android 微信SDK分享功能中的最全过程步
  5. Android的文本编解码工具类
  6. 【email】android邮件Email
  7. Android(三)Android SDK无法更新解决方式
  8. Android Animation动画(Frame-By-Frame An
  9. android > android 客户端 ,PHP 服务器端
  10. 2011.12.05(4)——— android JNI学习之三