博客列表 >opp基础:类与对象的 类的继承和调用 构造器 静态成员等

opp基础:类与对象的 类的继承和调用 构造器 静态成员等

手机用户1617360551
手机用户1617360551原创
2021年08月14日 10:41:35689浏览

opp基础:

用class关键字声明一个,

  • 类的成员有 类属性和类方法 和 构造方法

  • 构造器可以给类属性初始化赋值,每次实例化都会自动调用构造方法

  • 对象引用 $this-> 引用符:$this的意思就是本身,在$this中有个指针,谁调用它,他就指向谁,它只能再类内部使用。

  • 带有final关键字的方法为最终方法,不能够被重写,但可以被子类继承

实例演绎

  1. <?php
  2. //父类
  3. class Car
  4. {
  5. public $name; //类的属性前边加访问修饰符
  6. public $carType;
  7. private $member = 8.5;
  8. //构造器,给类的属性初始化赋值,每次实例化,都会自动调用
  9. public function __construct($name,$carType)
  10. {
  11. //$this-> 对象引用
  12. $this->name = $name;
  13. $this->carType = $carType;
  14. }
  15. //成员方法,
  16. public function getPrice()
  17. {
  18. return "{$this->name}的热卖车型是{$this->carType}";
  19. }
  20. //一个方法被添加了final关键字,则意味这个方式为最终方法,不能被重写
  21. final public function member()
  22. {
  23. return "本店的老用户,可以享受特殊优惠价格是所有车辆价格的{$this->member}折.";
  24. }
  25. }

类的继承和扩展

声明一个子类,继承和扩展父类,一个类为另一个类引用,实现类的扩展,这个类就是子类(扩展类),被继承的类就是父类(基类);

  • 类的继承和扩展 是通过 extends关键字来是实现的

  • opp就有单继承的特点,这是单继承带来程序的高耦合性,这是它的一个缺点,为解决这个问题,PHP提供了trait 解决方案—————待学

  • 类方法成员的重写与扩展: parent:: 关键字来调用类的成员方法,然后添加一些内容来实现类成员方法的重写; 也可以添加成员方法来实现类的功能扩展;

  • 子类能重写父类中带有final关键字的方法,声明为final的方法,为最终方法;最终方法不能被重写,但是可以被子类继承;

  • 类中的静态成员, static关键字,标志的是静态属性/静态方法, 静态成员只能为本类来调用,为所有实例所共享, 静态成员的访问方式是 self::,因为静态成员不能被实例化,所以静态成员的本质是类,只能使用类引用的方式访问就是self::方式;

实例演绎

  1. <?php
  2. //子类
  3. class Carson extends Car
  4. {
  5. protected $price; //添加属性,实现属性扩展
  6. static $discount = 8.8; //静态属性
  7. static $count=0;
  8. public function __construct($name,$carType,$price)
  9. {
  10. //是用parent:: 关键字来 继承父类的成员方法;
  11. parent::__construct($name,$carType);
  12. $this->price = $price;
  13. self::$count ++;
  14. }
  15. public static function getCount()
  16. {
  17. echo "目前关注本网站的用户有".self::$count."位";
  18. }
  19. //使用parent:: 关键字引用类成员方法,添加内容,来实现类成员方法的重写
  20. public function getPrice1()
  21. {
  22. return parent::getPrice()."正常价格是{$this->price},";
  23. }
  24. //添加类成员方法,来是实现类的扩展
  25. public function getDiscount()
  26. {
  27. //声明为private的成员属性不能被外部访问,但是可以在本类中调用
  28. return $this->getPrice1()."国庆节的优惠价格是".($this->price * self::$discount)."元.";//$discount是静态属性,须要通过self::来调用
  29. }
  30. }

类的实例化

自动加载器:通过spl_autoload_register函数来实现一个自动加载器,需要注意的是类名必须和文件名相同,才能实现类的自动加载功能

  1. <?php
  2. spl_autoload_register(function($className)
  3. {
  4. require $className.'.php';
  5. });

在客户端代码中 加载一个自动加载器,来实现类的自动加载

  • 通过instanceof 关键字检测一个对象是不是一个类的实例,返回值是bool值

  1. <?php
  2. require 'autoload.php';
  3. //使用NEW 关键字 将类赋给一个变量 实现类的实例化
  4. $car1 = new Carson('BMW','330i运动型',380000);//第一次实例化
  5. echo $car1->getDiscount();
  6. echo "<br>";
  7. //通过instanceof关键字检测 $car1是不是 Carson的是实例,是就返回true,不是则返回flase
  8. var_dump($car1 instanceof Carson);
  9. echo '<br>';
  10. $car = new Car('BMW','330i运动型');
  11. echo $car->member();//访问类中的最终方法
  12. echo '<br>';
  13. $car2 = new Carson('BWM','530li豪华型',450000);//二次实例化
  14. $car3 = new Carson('BWM','750li行政版',1450000);//三次实例化
  15. echo $car2->getDiscount();
  16. echo '<br>';
  17. echo $car3->getDiscount();
  18. echo '<br>';
  19. $car2::getCount();//每次实例化,自加一,来实现用户调用的检测
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议