博客列表 >0202-类声明及类的实例化,静态成员与类的扩展,trait与父类的区别

0202-类声明及类的实例化,静态成员与类的扩展,trait与父类的区别

世纪天城
世纪天城原创
2021年02月03日 13:32:45717浏览

类声明及类的实例化```php

  1. <?php
  2. // class关键字声明类
  3. class a{
  4. public $name ;//public公共成员
  5. protected $price ;//protected受保护的成员,在当前类中和子类中访问,类的外部不可访问
  6. private $sum ;//private私有成员,仅限本类中访问
  7. protected static $combined ; //static 关键字用来声明静态成员和方法
  8. // __construct 类的构造函数
  9. public function __construct($name = '',$price = '',$sum = '')
  10. {
  11. // $this是类实例的引用
  12. // 用$this关键字来对类的成员属性进行初始化
  13. $this->name =$name;
  14. $this->price=$price;
  15. $this->sum=$sum;
  16. }
  17. public function show(){
  18. return '名称:' .$this -> name.' 单价:'.$this->price . '元' . ' 数量: ' . $this->sum . '个';
  19. }
  20. public static function index($combined){
  21. // $this 代表当前对象!! 静态方法中应该使用 类名 、 self 或者 static 关键字来代替!
  22. return self::$combined = $combined;
  23. }
  24. public function combined(){
  25. $data = '名称:' .$this -> name.' 单价:'.$this->price . '元 数量: ' . $this->sum . '个 合计:' . $this ->price * $this->sum . '元';
  26. return $data;
  27. }
  28. }
  29. // new关键字用来实例化类
  30. $obj = new a('php',99,2);
  31. // 类实例调用
  32. //
  33. echo $obj -> show();
  34. echo '<br>';
  35. echo $obj -> combined();
  36. echo '<br>';
  37. // 注:类实例也可以访问静态方法,但不推荐这样用;并且类实例不能访 问静态成员
  38. echo $obj -> index('你好php111');
  39. echo '<br>';
  40. // 用静态访问静态方法
  41. //注:不能用静态访问普通成员和普通方法
  42. echo a::index('你好php');

静态成员与类的扩展

  1. <?php
  2. class static1{
  3. public static $name;
  4. protected static $age;
  5. public function __construct($name,$age)
  6. {
  7. // self关键字为类的引用 仅限在本类中使用
  8. // 也可以使用static关键字来访问类中的静态方法及静态成员
  9. self::$name=$name;
  10. self::$age=$age;
  11. }
  12. public static function show(){
  13. return "姓名: ".self::$name . " 年龄:" . self::$age;
  14. }
  15. }
  16. // new static1('张三','25');
  17. // 在类外可以是类名方位静态方法及静态成员 无需new一个对象
  18. // echo static1::$name;
  19. echo static1::show();

trait与父类的区别

trait类:

  1. <?php
  2. trait b{
  3. // trait: 理解为一个公共方法集
  4. // trait 借用了class语法实现的一个轻量级的"类",但不是类,所以不能"实例化"
  5. // 要使用trait的类中,在子类中使用use关键字引用它即可
  6. // 引入并继承trait b类
  7. // 为防止trait重名可以取别名:
  8. // use b{
  9. // 别名
  10. // b::show as b_show;
  11. // }
  12. // 注:在父类和trait及子类中同时存在同一方法时 子类优先级最高 其次是trait,最后才是父类
  13. public function show(){
  14. return '欢迎学习php';
  15. }
  16. }

父类:

  1. <?php
  2. class parent1{
  3. public $name;
  4. public $age;
  5. public function __construct($name = '',$age = '')
  6. {
  7. $this -> name = $name;
  8. $this -> age = $age;
  9. }
  10. public function show(){
  11. return "姓名:{$this -> name} 年龄:{$this -> age}";
  12. }
  13. }

子类:

  1. <?php
  2. // extends为 继承父类或者扩展
  3. class wage extends parent1{
  4. // 引入并继承trait b类
  5. // 为防止trait重名可以取别名:
  6. // use b{
  7. // 别名
  8. // b::show as b_show;
  9. // }
  10. use b;
  11. public function __construct($name='',$age='',$wage='')
  12. {
  13. // parent调用父类中的方法和属性
  14. parent::__construct($name,$age);
  15. $this->wage =$wage;
  16. }
  17. // public function show(){
  18. // return parent::show(). " 工资: " .$this->wage;
  19. // }
  20. }

类的自动加载器

  1. <?php
  2. // 类的自动加载器
  3. spl_autoload_register(function($className){
  4. // echo $className;
  5. require $className.'.php';
  6. });
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议