Blogger Information
Blog 37
fans 0
comment 1
visits 29678
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示子类的三个应用场景, 实例演示类成员的三种访问限制符的使用场景-0219-10-07
H先生
Original
720 people have browsed it

    


实例演示子类的三个应用场景(1.代码复用 2.功能扩展 3.方法重写)

2.png

实例

<?php


namespace _0929;


class Demo3
{
    // 变量给它一个逼格高的名称:属性
    public $product;
    public $price;

    // 构造方法  __construct 又叫模式方法
    // 魔术方法不需要用户手动调用,是有PHP根据某种条件自动触发
    public function __construct($product, $price)
    {
        // 1. 初始化对象的状态,有属性决定
        $this->product = $product;
        $this->price = $price;
    }

    // 方法(函数)
    public function getInfo()
    {

        return '商品名称: ' . $this->product.', 商品价格: ' . $this->price;
    }
}

// 子类
class Sub1 extends Demo3
{

}
$sub1 = new Sub1('iphone 11','9800');
echo $sub1->getInfo(). '<hr>';

// 子类扩展父类的功能
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 < 2000 && $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();

运行实例 »

点击 "运行实例" 按钮查看在线实例

















 限制符使用场景实例

3.png



实例

<?php
namespace _0930;

// 访问控制符  public
// public: 类中,类外均可访问
// protected: 类中,类外不可访问, 但是子类中可以访问
// private: 只允许在类中访问,类外和子类中不可以访问


use _0929\Sub3;

class Demo4
{
    // 类中成员: 属性, 方法
    // 成员属性, 成员方法
    // 对象属性: 需要使用类的实例进行访问的成员属性

    public $name; // 姓名
    protected $position; //职位
    private $salary; // 工资
    protected $department; // 部门

    //
    public function __construct($name, $position, $salary,$department)
    {
        $this->name = $name;
        $this->position = $position;
        $this->salary = $salary;
        $this->department = $department;
    }

    // 职位访问器/方法/函数
    public function getPosition()
    {
        return $this->position === '开发部' ? $this->name : '无权查看';
    }

    // 工资访问器/方法/函数
    public function getSalary()
    {
        // 工资 只允许财务部的人看
//        if ($this->department === '财务部'){
//            return  $this->salary;
//        }
//       return '无权查看';

        return $this->department === '财务' ? $this->salary : '无权查看';
    }

    // 部门访问器/方法/函数
    public function getDepartment()
    {
        return $this->department;
    }
}

$obj = new Demo4('朱老师','开发部',8888,'老师');
echo $obj->name,'<br>';
//echo $obj->position,'<br>';
echo $obj->getPosition(),'<br>';
echo $obj->getSalary(),'<br>';
echo $obj->getDepartment(),'<br>';


class Sub extends  Demo4
{
    public function display()
    {
       // return $this->name;  // name是public类型的
        return $this->position;  // position是protected类型的
        // return $this->salary;  // salary是private型的
    }
}

echo '<hr>';
$sub = new Sub('欧旺客','讲师', 9999, '培训部');
echo $sub->display(), '<br>';

运行实例 »

点击 "运行实例" 按钮查看在线实例











Correction status:qualified

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