博主信息
博文 48
粉丝 0
评论 0
访问量 50114
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
构造方法,子类继承,访问控制--2019年09月30日20时00分
小星的博客
原创
899人浏览过

构造方法

构造方法又叫魔术方法,是类在实例化过程中自动触发的方法,即类的初始化。

语法如下,其中 $this表示为当前对象的引用,就理解为该类实例化后的对象。

构造函数不光只可以初始化属性,还可以初始化方法。

class Demo2 {
    public $name;
    public $age;
    //构造方法
    //又叫魔术方法
    // 系统自动触发的方法
    public function __construct($name,$age)
    {
        // 作用:用来初始化对象的状态,这个状态由属性决定
        $this->name = $name;
        $this->age = $age;

        // 完成对象创建时的自动化操作
        // 自动执行 getName() 函数
        $this->getName();
    }
    public function getName(){
        return  $this->name;
    }
}

$people = new Demo2('zmx',24);

子类继承

实现子类继承使用 extends 关键字。

子类继承一般有以下三个场景使用。

    先定义个父类:

class Fruit {
    public $name;
    public $price;

    public function __construct($name,$price)
    {
        $this->name = $name;
        $this->price = $price;
        $this->getName();
    }
    public function getName(){
        return $this->name;
    }
    public function getPrice(){
        return $this->price;
    }
}

1.  代码复用:复用父类中成员

class Apple extends Fruit {
    // 1. 代码复用
    // ...
}
$apple1 = new Apple('苹果',100);
echo $apple1->getName(); // 这里看到父类中成员全部被子类继承了

2. 子类中功能扩展,在子类中定义新属性方法

class Peach extends Fruit {
    // 2. 功能扩展
    public $place; // 新增属性

    public function __construct($name, $price, $place)
    {
        在父类的构造函数基础上加入新的属性
        parent::__construct($name, $price);
        $this->place =  $place;
    }
    // 这里扩展一个 intro 方法
    public function intro(){
        return '果名:'.$this->name.'价格:'.$this->price.'产地:'.$this->place;
    }
}
$peach1 = new Peach('水蜜桃','19','阳山');
echo $peach1->intro();

3. 改写父类中方法


class Grape extends Fruit {
    public $season;
    public function __construct($name, $price, $season)
    {
        parent::__construct($name, $price);
        $this->season = $season;
    }

    // 3. 方法改写
    public function getName()
    {
        $name = parent::getName();
        return $name.':水果之王';
    }

    public function getPrice() // 改写getPrice()方法,加点判断进去
    {
        $price = parent::getPrice();
        // 旺季涨价,淡季减价
        if($this->season == '旺季') {
            $newPrice = $price * 1.2;
        }else if ($this->season == '淡季'){
            $newPrice = $price * 0.7;
        }
        return $newPrice;
    }
}
$grape1 = new Grape('葡萄','100','旺季');
echo $grape1->getName();
echo $grape1->getPrice();


访问控制符

 public   类中类外都可以访问,子类也可以访问 
 protected  
类中可以访问,类外不能访问,子类可以访问
 private   
只允许在自己类中使用,类外子类都不行,这是最严格的

class People
{
    public $name;
    protected $sex;
    private $age;

    public function __construct($name, $sex, $age)
    {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
    }

    public function getSex()
    {
        return $this->sex;
    }

    public function getAge()
    {
        return $this->age;
    }
}

$guy = new People('Tom', 'male', 23);
echo $guy->name; // public 可以直接访问
echo $guy->getSex(); // protected 类中可以访问,类外没法访问
echo $guy->getAge(); // private 类中可以访问,类外没法访问


class Son extends People {
    function getSex(){
        return $this->sex;
    }
    function getAge()
    {
        // return $this->age; // 没法访问父类中 private 成员
    }
}
$son = new Son('Jack','male',78);
echo $son->getSex();  // 可以在子类中访问到 protected
echo $son->getAge();  // 不可以在子类中访问到 pivate
可以看到 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+教程免费学