Blogger Information
Blog 12
fans 0
comment 0
visits 9350
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
子类的应用场景和访问限制符
这位同学问得好的博客
Original
550 people have browsed it

一、子类的功能


    1,代码复用

//类的继承
class Demo2{
    public $product;
    public $price;
    //构造方法
    //前面加两个__ 下划线的方法,也叫做魔术方法
    //魔术方法不需要用户手动调用,是PHP根据条件自动触发
    function __construct($product,$price){
        $this->product = $product;
        $this->price = $price;
    }

    public function getInfo(){
        return '商品名称:' . $this->product . ',商品价格:'.$this->price;
    }
}

//现在这个子类就拥有父类所有属性和方法
class Sub extends Demo2{
    //..
}

   

    2,功能扩张

class Sub2 extends Demo2{
    public $num;    //定义数量

    public function __construct($product, $price, $num)
    {
        parent::__construct($product, $price);  //这个方法相当于将父类的构造方法复制过来
        $this->num = $num;
    }
    //增加一个计算总价的方法
    public function total(){

        //round四舍五入方法,第一个为要计算的值,第二个为保留小数点后位数
        return round($this->price * $this->num,2);
    }

}

$obj = new Sub2('电脑',12.55,10);
echo $obj->product . '的价格总价为:' . $obj->total();


    3,方法重写

class Sub3 extends Sub2{
    public function total()
    {
        //获取父类total方法
//        return parent::total();
        $total = parent::total();
        switch (true){
            case($total>4000 && $total<6000):
                $discountRate = 0.88;
                break;
            case($total>=6000):
                $discountRate = 0.78;
                break;
            default:
                $discountRate = 1;
        }

        return round($total*$discountRate,2);
    }
}


二、三种访问限制符

    1,public    全局可用的; 类中,类外可访问,子类也可以访问

    2,protected  受保护的;  类中可访问,类外不可访问,子类也可以访


    3,private  私有的;     类中可访问,类外不可访问,子类也不可以访问

namespace _0930;

class Demo3{
//     类中的成员有:1,属性。2,方法。
//     叫法:成员属性,成员方法
//     对象属性:需要使用类的实例化进行访问的成员属性


//public 全局可用的; 类中,类外可访问,子类也可以访问
//protected  受保护的;  类中可访问,类外不可访问,子类也可以访问
// private  私有的;     类中可访问,类外不可访问,子类也不可以访问

    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;
    }

    //  访问器/方法/函数(类中声明一个方法,将值重新return出去)
    public function position(){
        //简单权限控制
        if($this->position==='开发'){
            return '无权查看';
        }

        return $this->position;
    }
    public function salary(){
        return $this->salary;
        //三元运算符
        return $this->position==='开发'?'无权查看':$this->salary;
    }

}

$obj = new Demo3('张三','开发',1888,'IT部门');

echo $obj->name;    //public 可直接访问
echo '<hr>';
echo $obj->position();    //protected 可通过访问器访问
echo '<hr>';
echo $obj->salary();    //private 可通过访问器访问
echo '<hr>';

class Sub extends Demo3{
    public function display()
    {
//        return $this->name;                 public
//        return $this->position;             protected
//        return $this->salary;                 private
    }

}

$sub = new Sub('李四','测试',88888,'总经理');
echo $sub->display();

总结:父类中被声明为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
Author's latest blog post