博客列表 >子类的三个应用场景和类成员的三种访问限制符-2019-9-30作业

子类的三个应用场景和类成员的三种访问限制符-2019-9-30作业

零度 的博客
零度 的博客原创
2019年10月05日 11:42:43666浏览

子类的三个应用场景

实例

<?php

//类的继承: 代码复用的重要手段
namespace _0930;


class demo1
{
    // 属性(变量)
    public $product;
    public $price;

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

    // 方法(函数)
    public function getInfo()
    {
        return '名称: ' . $this->product.',数量:1台'.', 价格: ' . $this->price;
    }
}

// 继承子类
// 1. 代码复用 ,
class j1 extends Demo1
{
    // ...
}

$j1 = new j1('手机', 2800);
echo $j1->getInfo() . '<hr>';


// 2. 功能扩展 添加属性
class j2 extends Demo1{
    // 增加一个属性
    public $num; // 数量

    // 构造方法
    public function __construct($product, $price, $num)
    {
        parent::__construct($product, $price);//继承父类的构造方法
        $this->num = $num;
    }

    // 子类中增加一个新方法: 计算总和
    public function total()
    {
        return round($this->price * $this->num, 3);
    }
}

$j = new j2('手机', 2800, 10);
echo $j->num .'台'.  $j->product . '的总价是: '. $j->total(). '<hr>';

// 子类
// 3. 方法重写 方法修改
class j3 extends j2
{
    // 重写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;
    }
}

$j3 = new j3('手机', 2800, 10);
echo $j3->num .'台'.$j3->product.'的打折价是: ' . $j3->total();
?>

运行实例 »

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

类成员的三种访问限制符

public全局可以访问


实例

<?php
class demo1{
    public $name='jerry';	       // 名称
	protected $position='语文老师';   // 职位
	private $salary='5000';       // 工资
}
$demo1 = new demo1();
echo $demo1->name;
echo $demo1->psition;
echo $demo1->salary;

运行实例 »

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

 protected: 类中,类外不可访问, 但是子类中可以访问

实例

<?php
class demo1{
    public $name;	       // 名称
	protected $position;   // 职位
	private $salary;       // 工资
    public function __construct($name,$position,$salary)
	{
		$this->name = $name;
		$this->position = $position;
		$this->salary = $salary;
	
    }
    public function getName()
	{
		return $this->name;
	}
	public function getPosition()
	{
		return $this->position;
	}
	
	public function getSalary()
	{
		return $this->salary;
	}
}
$demo1 = new demo1('Jerry','教师',5555);
echo $demo1->name;
echo '<hr>';
// echo $demo1->position;
// echo $demo1->salary;
class demo2 extends Demo1
{
    public function display()
    {
       return $this->position; // protected
    //    return $this->salary; // private
    }
}

$obj = new Demo2('pertzhu', '讲师', 8888);
echo $obj->display(), '<br>';

运行实例 »

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

private: 只允许在类中, 类外, 子类中不可访问


实例

<?php
class demo1{
    public $name;	       // 名称
	protected $position;   // 职位
	private $salary;       // 工资
    public function __construct($name,$position,$salary)
	{
		$this->name = $name;
		$this->position = $position;
		$this->salary = $salary;
	
    }
    public function getName()
	{
		return $this->name;
	}
	public function getPosition()
	{
		return $this->position;
	}
	
	public function getSalary()
	{
		return $this->salary;
	}
}
$demo1 = new demo1('Jerry','教师',5555);
echo $demo1->name;
echo '<hr>';
// echo $demo1->position;
// echo $demo1->salary;
class demo2 extends Demo1
{
    public function display()
    {
    //    return $this->position; // protected
       return $this->salary; // private
    }
}

$obj = new Demo2('pertzhu', '讲师', 8888);
echo $obj->display(), '<br>';

运行实例 »

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

总结:

子类可以继承父类的所有代码,写法:class j2(子类名) extends(继承关键词) Demo1(父类名){  },parent::(父类方法名) 可用于调用父类中定义的成员方法。.

目前学到的访问控制符有三种:

public : 类中,类外均可访问, 子类中也可以访问

protected: 类中,类外不可访问, 但是子类中可以访问

private: 只允许在类中, 类外, 子类中不可访问


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