博客列表 >0930 子类继承及类成员访问权限 20190930 2000-2200

0930 子类继承及类成员访问权限 20190930 2000-2200

没有人的夏天的博客
没有人的夏天的博客原创
2019年10月11日 18:14:43640浏览

1,类的继承

// 引用父类方法内容 parent :: 要加()内的部分要写全, 没有参数要加空括号 (),变量不可以引用

// 类的继承要主要类成员的访问权限, 私有成员不可以继承

// 类的继承为类的复制,类的方法扩展,类的方法重写

// 类的方法扩展,是在父类的基础上增加新的属性及方法

// 类的方法重写,是指在父类的基础上进行新的方法设定,

// 因为子类的名称与父类不同,方法扩展和重写,都相当于是一个新的方法,但可以减少父类部分的代码书写量。

// __construct中的参数要写在 new 对象中 而不是对象调用的方法中


实例

class  Postion{
    // 属性
    public $pos;
    public $comname;
    public $contry;
    

    // 此处接受外面的传值,向属性赋值
    function __construct($pos,$comname,$contry)
    {
        // 指定传值对应的属性
        $this->pos=$pos;
        $this->comname=$comname;
        $this->contry=$contry;
    }

    function getinfo()
    {
        return '职位名称:'.$this->pos.'<br>'.'公司名称:'.$this->comname.'<br>'.'国家地区:'.$this->contry;
    }

}

// new 一个对象,并传值
$po = new Postion('php工程师','php中文网','中国大陆');

// 输出指定对象的一个指定方法
echo $po->getinfo();

echo '<hr>';

// 继承Postion的内容及扩展年假标准
class Cnpos extends Postion
{
    public $salary;
    public $cont;
    // __construct参数要写全
    function __construct($pos,$comname,$contry,$salary,$cont)
    {
        // 引用父类—__construct的内容 __construct参数要写全 parent内容要加()内的部分 变量不可以引用
        parent::__construct($pos,$comname,$contry);
        $this->salary=$salary;
        $this->cont=$cont;    
    }

    function getinfo1(){
        // 返回父类getinfo的内容 有两种方式,
        // 方式一 this指定父类内容
        return $this->getinfo().'<br>'.'薪水标准:'.$this->salary.'元'.'<br>'.'合同年限:'.$this->cont.'年';
        // 方式二 返回父类的引用
        return parent::getinfo().'<br>'.'薪水标准:'.$this->salary.'元'.'<br>'.'合同年限:'.$this->cont.'年';
    }
}

$po1 = new Cnpos('php工程师','php中文网','中国大陆',10000,3);

echo $po1->getinfo1();

echo '<hr>';

//
// 年假计算 aleaves方法重载
class Aleave extends Cnpos
{
    // 方法内容要返回出去才有效
    function annual(){
        return  7;
    }
    //非数值返回,无法进行赋值计算,如需要计算要分别返回
    function aleaves()
    {
        return $this->getinfo1().'<br>'.'年假天数:'.$this->annual().'天/年';
    }

}
$po2 = new Aleave('php工程师','php中文网','中国大陆',20000,3);
echo $po2->aleaves();

echo '<hr>';


class AleaveNew extends Aleave
{
    function aleaves()
    {
        // 把父类内的方法赋值注意要加()
        $aleavetatol = parent::annual();
        switch(true)
        {
            case ($this->cont >2 && $this->cont <3):
            $aleavetatol += 2;
            break;
            case ($this->cont >=3 && $this->cont <5):
            $aleavetatol += 4;
            break;
            case ($this->cont >=5):
            $aleavetatol += 7;
            break;
            default:
            
        }
        return $this->getinfo1().'<br>'.'年假天数:'.$aleavetatol.'天/年'.',合同年限每多两年,年假多增加两天';
    }
}

$po3 = new AleaveNew('php工程师','php中文网','中国大陆',20000,3);
echo $po3->aleaves();

echo '<hr>';

运行实例 »

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



2,类的访问权限

// 理解:类中内容的调用权限管理  // 类内容的访问限制

// 类的访问限制是指类内容的对外开放的权限,可以指定类成员的调用源,以提高代码的隐私性。

// 类的属性和方法前加限定符:

// protected 是指子类可以调用

// private ***类自己调用

// public 是指可以从外部单独调用



// 用户权限访问器是由方法控制而不是由类成员访问权限控制,超出访问权限访问会报错,而不是访问返回空,需要区别理解


实例

class  Postion1{
    // 属性
    public $pos;
    protected $comname;
    public $contry;
    private $level;

    // 此处接受外面的传值,向属性赋值
    function __construct($pos,$comname,$contry,$level)
    {
        // 指定传值对应的属性
        $this->pos=$pos;
        $this->comname=$comname;
        $this->contry=$contry;
        $this->level=$level;
    }
    function getinfo()
    {
        return '职位名称:'.$this->pos.'<br>'.'公司名称:'.$this->comname.'<br>'.'国家地区:'.$this->contry.'<br>'.'职位等级:'.$this->level;
    }
}

class Postion2 extends Postion1
{
    function getinfo()
    {
        return '职位名称:'.$this->pos.'<br>'.'公司名称:'.$this->comname.'<br>'.'国家地区:'.$this->contry.'<br>'. '职位等级:'.$this->level;
    }
}


$postion = new Postion1('前端开发讲师','php中文网','中国大陆','p3');
$postion2 = new Postion2('前端开发讲师','php中文网','中国大陆','p3');

// $level是private 私有项 ,类内部的方法可以调用,外部不可以直接调用。子类中也不可以调用
// echo $postion->level; 
echo '<hr>';

// $comname是protected 保护项 ,类内部的方法可以调用,外部不可以直接调用。也可以通过子类的方法调用
echo $postion->getinfo();

echo '<hr>';

// 此项输出会报错
echo $postion->comname;

echo '<hr>';
// 此项输出会报错,去掉postion2中getinfo中的this->level 后正常
echo $postion2->getinfo();

运行实例 »

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


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