博主信息
博文 22
粉丝 0
评论 0
访问量 22622
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
子类的应用场景以及访问控制符的应用---2019-9-30
sjgbctjda的博客
原创
846人浏览过

1、实例演示子类的三个应用场景

实例

<?php 

 namespace _0930task1;

 class commodity{
    //属性  
     public $name;
     public $model;
     public $number;

    //  构造方法

    public function __construct($name,$model,$number){
        $this->name=$name;
        $this->model=$model;
        $this->number=$number;
    }

    // 普通方法
    public function getInfo(){
        return '商品名称:'.$this->name.',型号:'.$this->model.',***数量:'.$this->number;    }
 }
// 子类作用一:代码复用
 class child1 extends commodity{
     //...
 }
 
 echo (new child1('华为','P30','10'))->getInfo();
 echo '<hr>';

//  子类作用二:扩展父类中的功能(属性和方法)
 class child2 extends commodity{
    public $price;

    public function __construct($name,$model,$number,$price){
        parent::__construct($name,$model,$number);//继承父类中的原有方法
        $this->price=$price;
    }

    // 增加一个新的方法
    public function total(){
        return round($this->number*$this->price,2);
    }
 }
 
 echo '原价:'.(new child2('华为','P30','10','4567.123'))->total();
 echo '<hr>';

// 子类作用三:方法重写
class child3 extends child2
{
    public function total(){
        $total=parent::total();
        switch(true)
        {
            case($total>70000):
            $discountRate=0.7;
            break;
            case($total>50000):
            $discountRate=0.8;
            break;
            case ($total>20000):
            $discountRate=0.9;
            break;
            default:
            $discountRate=1;
        }
        return '折扣价为:'.$total*$discountRate.'折扣率:<span style="color:red">'.$discountRate.'<span>';
    }
}

echo (new child3('华为','P30','10','4567.123'))->total();

运行实例 »

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

运行结果:

task0930.png

类的继承应用最多的功能应该是代码复用以及对功能扩展。

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

实例

<?php

namespace _0930task2;

class staff{
    
    // 属性
    public $name;
    public $age;
    private $gender;
    private $salary;
    protected $position;
    protected $department;

    // 构造方法
    public function __construct($name,$age,$gender,$salary,$position,$department)
    {

        $this->name = $name ;
        $this->age = $age;
        $this->gender = $gender;
        $this->salary = $salary;
        $this->position =$position;
        $this->department = $department;
    }

    public function getPublic(){
        return 'public定义属性--姓名:'.$this->name.',年龄:'.$this->age;
    }

    // 获取私有控制符定义的属性
    public function getPrivate(){
        return 'private定义属性--性别:'.$this->gender.',薪资:'.$this->salary;
    }

    // 获取受保护控制符定义的属性
    public function getProtected(){
        return 'protected定义属性--职位:'.$this->position .',部门:'.$this->department;
    }

}

$obj = new staff('Reid','19','男','20000','饮水机看守员','项目部');
echo $obj->getPublic(),'<hr>';
echo $obj->getPrivate(),'<hr>';
echo $obj->getProtected(),'<hr>';

class child1 extends staff{
    public function getInfo1(){
        
        return $this->department;
    }
    public function getInfo2(){
        
        return $this->salary;
    }
}
$obj = new child1('Reid','19','男','20000','饮水机看守员','项目部');
echo $obj->getInfo1(),'<hr>';
echo $obj->getInfo2();

运行实例 »

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

运行结果:

task20930.png

task209301.png

访问控制符定义属性:

 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+教程免费学