博客列表 >实例演示子类的三个应用场景, 实例演示类成员的三种访问限制符的使用场景2019/9/30

实例演示子类的三个应用场景, 实例演示类成员的三种访问限制符的使用场景2019/9/30

西门吃雪
西门吃雪原创
2019年10月03日 17:23:07628浏览

子类的三种应用场景

<?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>';  //getInfo将整个数据打印输出

// 子类
// 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); // 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();   //调用原来未被重写的方法第56行  roud以后

//        设置折扣率
        switch (true)
        {
            case ($total > 20000 && $total < 40000):
                $discountRate = 0.88;   //折扣率discountRate
                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);     //折扣价的变量$discountPrice

        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();


echo '<hr>';
$sub3 = new Sub3('电脑', 2990, 10);


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

--------------------------------------------------------------------------------------------------------------

运行效果图

QQ截图20191003134329.jpg

                                                实例演示类成员的三种访问限制符的使用场景

 <?php 
namespace _0930;
// 访问控制符: public
// public : 类中,类外均可访问, 子类中也可以访问
// protected: 类中,类外不可访问, 但是子类中可以访问
// private: 只允许在类中, 类外, 子类中不可访问

//访问控制符: public

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;
	}
	//工资访问器/方法/函数
	public function getSalary()
	{
		//工资 只允许财务部的人看
		// if ($this->department === '财务部')
		// {
		// 	return $this->salary;
		// }
		// return '无权查看';
		//--------------低下是简化版-----------------
		return $this->department === '财务部' ? $this-> salary : '无权查看';  //?前面是条件:前面代表成功访问: 代表失败返回.
	}
	//部门访问器/方法/函数
	public function getDepartment()
	{
		return $this->department;
	}





}

  $obj = new Demo4('万物', '学生', 1500, '研发部');
  echo $obj->name,'<br>';
  //echo $obj->position,'<br>';
  echo $obj->getPosition(),'<br>';
  //echo $obj->salary;
  echo $obj-> getSalary(),'<br>';
  // echo $obj->department;
  echo $obj->getDepartment(),'<br>';

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

 	}
 }


$sub = new Sub('舞','舞者',6666,'国家队');
echo $sub->display(),'<br>';































 ?>

QQ截图20191003172159.jpg











----------------------------------------------------------------------------

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