子类的三个应用场景
1.代码复用
2.功能扩展
3.方法重写
实例
<?php //类的继承: 代码复用的重要手段 namespace _0930; class Demo3 { // 属性(变量) public $product; public $price; // 构造方法 public function __construct($product, $price) { $this->product = $product; $this->price = $price; } // 方法(函数) public function getInfo() { return '商品名称: ' . $this->product.', 商品价格: ' . $this->price; } } // 子类 // 1. 代码复用 class Sub1 extends Demo3 { // ... } $sub1 = new Sub1('iPhone 11', 9800); echo $sub1->getInfo() . '<hr>'; // 子类 // 2. 功能扩展 class Sub2 extends Demo3 { // 增加一个属性 public $num; // 数量 // 构造方法 public function __construct($product, $price, $num) { // $this->product = $product; // $this->price = $price; // 继承父类 parent::__construct($product, $price); $this->num = $num; } // 子类中增加一个新方法: 计算总和 public function total() { return round($this->price * $this->num, 3); } } $sub2 = new Sub2('电脑', 3980.1234, 13); echo $sub2->product . '的总价是: '. $sub2->total(). '<hr>'; // 子类 // 3. 方法重写 class Sub3 extends Sub2 { // 重写total() public function total() { $total = parent::total(); // 设置折扣率 switch (true) { case ($total > 20000 && $total < 40000): $discountRate = 0.88; break; case ($total >= 40000 && $total < 60000): $discountRate = 0.78; break; case ($total >= 60000): $discountRate = 0.68; break; default: // 小于或等于2000,不打折 $discountRate = 1; } // 打折后的价格 $discountPrice = round($total*$discountRate, 2); if ($discountRate < 1) { $discountPrice=$discountPrice . '元, <span style="color: red">('. $discountRate.'折)</span>'; } // 返回折扣价 return $discountPrice; } } //$sub3 = new Sub3('电脑', 3980, 13); $sub3 = new Sub3('电脑', 3980, 33); echo '折扣价是: ' . $sub3->total();
运行实例 »
点击 "运行实例" 按钮查看在线实例
类成员的三种访问限制符的使用场景