Blogger Information
Blog 44
fans 0
comment 0
visits 35590
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP构造函数与类继承-2019年3月1日
的博客
Original
943 people have browsed it

构造方法:

构造方法用来初始化对象成员 

构造方法: public function __construct(){...} 

class Demo04
{
    // 对象属性
    public $product;
    public $price;

    // 构造方法
    public function __construct($product, $price)
    {
        $this->product = $product;
        $this->price = $price;
    }

    // 对象方法
    public function getInfo()
    {
        return  '品名: ' .$this->product .', 价格: ' . $this->price . '<br>';

    }

}

类的继承 :

关键字:extends

功能作用:能够在父类的基础上扩展(重写)父类的功能和属性

<?php

// 关键词: 类的继承,功能扩展, 方法重写

// 将Demo04类代码复制过来,改为Demo05

class Demo05
{
    // 对象属性
    public $product;
    public $price;

    // 构造方法
    public function __construct($product, $price)
    {
        $this->product = $product;
        $this->price = $price;
    }

    // 对象方法
    public function getInfo()
    {
        return  '品名: ' .$this->product .', 价格: ' . $this->price . '<br>';
    }
}


// 子类Sub1, 代码复用
class Sub1 extends Demo05
{
    // ...
}

// 实例化子类Sub, 尽管子类中无任何成员,但是它可以直接调用父类Demo05中的全部成员
$sub1 = new Sub1('手机', 3500);
echo '总价: ' . $sub1->getInfo() . '<hr>';

/*****************************************************************/

// 子类Sub2, 增加属性和方法,扩展父类功能
class Sub2 extends Demo05
{
    public $num;  // 数量

    // 子类的构造方法
    public function __construct($product, $price, $num)
    {
        // 调用父类的构造方法,否则还要手工把父类中的属性初始化语句全部写一遍
        // parent:: 调用被覆写的父类方法内容
        parent::__construct($product, $price);
        // 只需要添加子类中的成员初始化代码
        $this->num = $num;
    }

    // 计算总价
    public function total()
    {
       return  $this->price * $this->num;
    }
}

// 实例化子类
$sub2 = new Sub2('电脑',4980, 13);

echo $sub2->product . '的总价: ' . $sub2->total() . '<hr>';

/***************************************************************/

// 方法重写
// 为了促销, 通常会根据总价,给予一定的折扣,刺激消费者***更多的商品或服务
// 第三个子类, 继承自Sub2, 而Sub2又继承自Demo05,这就形成了多层给的继承关系
class Sub3 extends Sub2
{
    // 重写父类total()方法, 增加计算折扣价功能
    public function total()
    {
       $total = parent::total();

       // 设置折扣率
        switch (true) {
            case ($total >= 10000 && $total < 20000):
                $discountRate = 0.98;    // 98折
                break;
            case ($total > 20000 && $total < 40000):
                $discountRate = 0.88;    // 88折
                break;
            case ($total > 40000 && $total < 60000):
                $discountRate = 0.78;    // 78折
                break;
            case ($total >= 60000):
                $discountRate = 0.68;    // 68折
                break;
            default:
                $discountRate = 1;
        }
        // 结果四舍五入,保留2位小数
        return round($total*$discountRate, 2);

    }
}

// 实例化子类, 88折
$sub3 = new Sub3('电脑',4980, 13);

echo '折扣价: ' . $sub3->total();


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post