Blogger Information
Blog 22
fans 0
comment 0
visits 18372
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
子类的应用场景以及访问控制符的应用---2019-9-30
sjgbctjda的博客
Original
692 people have browsed it

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:在类中和类外边都不能直接通过对象属性进行访问,通过在类中定义一个方法(访问器)来进行访问;不能直接在子类中定义方法来访问该属性,需要在调用父类中的方法进行访问。


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