Blogger Information
Blog 26
fans 0
comment 3
visits 19686
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示子类的三个应用场景, 实例演示类成员的三种访问限制符的使用场景2019/9/30
西门吃雪
Original
631 people have browsed it

子类的三种应用场景

<?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











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

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