博客列表 >类与实例、类属性与类方法、类成员的访问控制、类的扩展以及扩展的方式

类与实例、类属性与类方法、类成员的访问控制、类的扩展以及扩展的方式

零龙
零龙原创
2020年07月30日 22:28:49587浏览

php类的定义与实例化


php类的定义

类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。类是通过class关键字来定义的。
基本语法:

  1. class 类名
  2. {
  3. 1.属性
  4. 2.方法
  5. }

注意事项:
1.定义一个类(只能用class定义)
举个例子:
定义一个汽车类,属性有车的颜色和价格

  1. class Car
  2. {
  3. public $color; //定义颜色
  4. public $price; //定义价格
  5. }

php类的实例化方法

类的实例化又叫创建一个对象或者实例化一个对象或者把类实例化。
简单的来举个例子:
我们定义一个人汽车,并把这个类实例化。

  1. class Car
  2. {
  3. public $color = '蓝色'; //定义汽车颜色
  4. public $price = 1960000; //定义汽车价格
  5. public $model = 'BMW-X5M';
  6. }
  7. $car = new Car; // 实例化类
  8. echo '颜色:'.$car->color;
  9. echo '价格:'.$car->price;
  10. echo '型号:'.$car->model;

php类的访问控制

对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。

public 公用属性(在类与子类和外部都可以调用)
protected 受保护的属性(在类与子类中使用外部不可以调用)
private 私有属性(只有在类本身使用子类和外部都不可以调用)

类成员都必须使用关键字public、protected 或 private 进行定义
示例:

  1. <?php
  2. class Car
  3. {
  4. public $color = '蓝色'; //定义汽车颜色公用属性
  5. protected $price = 1960000; //定义汽车价格私有属性
  6. private $model = 'BMW-X5M'; //隐私属性
  7. public function mycar()
  8. {
  9. return "我的车是:{$this->model}";
  10. }
  11. }
  12. class Rob extends Car
  13. {
  14. public function mycar1()
  15. {
  16. return "我的车是:{$this->model},车价格是:{$this->price},颜色是:{$this->color}";
  17. }
  18. }
  19. $car = new Rob; // 实例化类
  20. echo $car->mycar();
  21. echo "<hr>";
  22. echo $car->mycar1();
  23. echo "<hr>";
  24. echo "我的车颜色是:".$car->color;
  25. echo "<hr>";
  26. echo "我的车是:{$car->model},车价格是:{$car->price},颜色是:{$car->color}";

php类的扩展以及扩展的方式

在类中我们可以定义属性及方法,可以在类中扩展出子类,使类的功能更加强大。
在下面示例中我使用了类的几种扩展加深对类的学习。
示例:

  1. <?php
  2. class User
  3. {
  4. //公用属性 public 在类和类中及外部都可与调用
  5. //受保护的属性 protected 在类和子类用可与调用
  6. //私有属性 private 在类中可以调用子类和外部不能调用
  7. private $user ='曹操';
  8. public $age = 66;
  9. public $nation ='魏国';
  10. public static $mobile='13999999999'; //静态公用属性
  11. public static $like = '貂蝉';
  12. protected $mobilep ='13666666666';
  13. public function attribute()
  14. {
  15. return "人物属性:姓名:{$this->user}|年龄:{$this->age}|国家:{$this->nation}|电话:".self::$mobile;
  16. //返回人物属性,使用了self调用静态属性
  17. }
  18. public static function attribute1()
  19. {
  20. $mo = new User;
  21. return "人物属性:姓名:".self::$like."|电话:{$mo->mobilep}";
  22. //静态方法使用$this只能调用静态属性,在方法中实例化类才能调用类属性
  23. }
  24. }
  25. class Rob extends User //子类扩展
  26. {
  27. public $user = '刘备';
  28. private $agec = 58;
  29. private $mobilec ='13000000000';
  30. private $nationc ='蜀国';
  31. public function attribute2()
  32. {
  33. return "人物属性:姓名:{$this->user}|年龄:{$this->agec}|国家:{$this->nationc}|电话:{$this->mobilec}";
  34. }
  35. public function attribute3(Closure $userattr,String $username)
  36. {
  37. return "人物属性:姓名:".$username."|".$userattr()."|喜欢:".self::$like;
  38. //调用外部属性和方法,静态属性不可以被重定
  39. }
  40. public function attribute4()
  41. {
  42. $user = '董卓';
  43. $age = 72;
  44. $mobile = 13111111112;
  45. $nation = '东汉';
  46. return "人物属性:姓名:{$user}|年龄:{$age}|国家:{$nation}|电话:{$mobile}|喜欢:".self::$like;
  47. }
  48. public function attribute5(Int $num)
  49. {
  50. switch ($num)
  51. {
  52. case 1:
  53. echo $this->attribute();
  54. break;
  55. case 2:
  56. echo $this->attribute1();
  57. break;
  58. case 3:
  59. echo $this->attribute2();
  60. break;
  61. default:
  62. echo $this->attribute4();
  63. }
  64. }
  65. }
  66. $username = '董卓';
  67. $userattr = function()
  68. {
  69. $age= 75;
  70. $nation ='魏国';
  71. $mobile ='13333333333';
  72. return "年龄:".$age."|国家:".$nation."|电话:".$mobile;
  73. };
  74. $user = new Rob; //调用子类包含父类的属性和方法
  75. echo $user->attribute();
  76. echo '<hr>';
  77. echo $user->attribute1();
  78. echo '<hr>';
  79. echo $user->attribute2();
  80. echo '<hr>';
  81. echo $user->attribute3($userattr,$username);
  82. echo '<hr>';
  83. $num =rand(1,4);
  84. echo $user->attribute5($num);

示例图

总结

对类的基础使用有所了解,在对属性也基本认识。对类的扩展和使用基本学会。
但对静态的处理及类以及外部传参调用,还需要多学习

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议