博主信息
博文 32
粉丝 1
评论 5
访问量 36169
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
子类的三个应用场景和类成员的三种访问限制符-2019-9-30作业
零度 的博客
原创
878人浏览过

子类的三个应用场景

实例

<?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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学