博客列表 >2019.09.30作业 类的方法、构造函数、继承及访问控制符

2019.09.30作业 类的方法、构造函数、继承及访问控制符

Léon的博客
Léon的博客原创
2019年10月21日 15:43:41847浏览

总结:

一、类中的方法、self、$this

    1、类中的变量称为属性,类中的函数称为方法。

    2、在类中的方法实例化类可以使用 new self(); self为当前类的引用。

    3、$this 是当前对象的引用,是一个伪变量。$this不需要创建,可以直接使用。

    4、类中的方法尽量用return返回需要的内容。

二、类的构造函数

    1、构造函数是PHP中的一个魔术方法,构造函数的形式:

        public function __construct(参数列表){


        }

    2、PHP中如果变量没有初始化,其为NULL

    3、魔术方法:以__开头的方法是魔术方法,魔术方法不需要用户调用,他由PHP根据某种条件自动触发。

    4、构造函数的作用:

        (1)初始化对象

        (2)完成对象创建是的自动化操作

三、类的继承

    1、类继承的关键字:extends

    2、类继承的作用:代码复用

    3、类继承的三个应用:

        (1)代码复用:子类可以使用父类中的代码(public和protected修饰的)

        (2)功能拓展:子类中可以添加属性和方法,拓展父类。

        (3)方法重写:子类可以重写父类中的方法。

    4、子类调用父类的方法可以使用:parent::方法名。

四、对象成员的访问控制:

    1、对象成员有三种访问控制符:public、protected、private

    2、三种访问控制符的权限:

        (1)public修饰的成员在类中、类外、子类中均可访问。

        (2)protected修饰的成员在类中、子类中均可访问,类外不可以访问。

        (3)private修饰的成员仅在类中可以访问,类外、子类中均不可访问。

作业:

1:子类的三个应用场景:

实例

<?php
    // 继承的三个用途:
    class Person{

        public $name;
        public $age;
        public $sex;

        public function __construct($name,$age,$sex)
        {
            // 构造函数的作用1:初始化对象
            $this->name=$name;
            $this->age=$age;
            $this->sex=$sex;
            // 构造函数的作用2:完成对象创建时的自动化操作
            echo $this->getInfo();
        }
        public function getInfo(){
            // 函数中尽量不要使用echo,把需要的内容return出去
           return $this->name . '<br>' . $this->age . '<br>' . $this->sex . '<hr>';
        }

    }
    // 1:复用父类的代码    
    class Man extends Person{

    }
    $man=new Man('小黑',32,'男');

    // 2、拓展父类功能
    class Women extends Person{
        public $wight;
        public function __construct($name,$age,$sex,$wight)
        {
            //使用parent::__construct(参数);可以复用父类的构造函数
            parent::__construct($name,$age,$sex);
            $this->wight=$wight;
        }
        public function dieted(){
            if($this->sex==='女'){
                if($this->wight>50){
                    return $this->name . '体重' .  $this->wight . '斤,要减肥了。';
                }
                else{
                    return $this->name . '体重' .  $this->wight . '斤,身材很棒。';
                }
            }
            else{
                return '我们之为女性服务。';
            }          
        }
    }
    $women=new Women('小红',23,'女',51);
    echo $women->dieted();
    echo '<hr>';
    // 3、重写父类中的方法
    class FatWomen extends Women{
        public function dieted(){
            if($this->sex==='女'){
                if($this->wight>50&&$this->wight<=60){
                    return $this->name . '体重' .  $this->wight . '斤,要减肥了。' . '减肥套餐:¥998';
                }
                else if($this->wight>60&&$this->wight<=80){
                    return $this->name . '体重' .  $this->wight . '斤,要减肥了。' . '减肥套餐:¥1998';
                }
                else if($this->wight>80){
                    return $this->name . '体重' .  $this->wight . '斤,要减肥了。' . '减肥套餐:¥5998';
                }
                else{
                    return $this->name . '体重' .  $this->wight . '斤,身材很棒,不用减肥了。';
                }
            }
            else{
                return '我们之为女性服务。';
            }        

        }
    }

    $fatwomen=new FatWomen('小红',23,'女',69);
    echo $fatwomen->dieted();

运行实例 »

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

2、访问控制符的应用

实例

<?php
// 访问控制符的应用场景
class Person{
    // private修饰的成员在类中、类外及子类均可以访问
    public $name;
        // private修饰的成员在类中和子类中可以访问,类外不可访问
    protected $age;
    // private修饰的成员仅在类中可以访问,类外及子类均不可访问
    private $sex; 

    public function __construct($name,$age,$sex)
    {
        $this->name=$name;
        $this->age=$age;
        $this->sex=$sex;
    }
    public function getAge(){
        return $this->age;
    }
    public function getSex(){
        return $this->sex;
    }
}
$person=new Person('小明',50,'男');

// age属性是protected不可以在类外访问,但可以在类内访问,通过getAge方法返回出来
// echo $person->age;
echo $person->getAge();
echo '<hr>';
// sex属性是private不可以在类外访问,但可以在类内访问,通过getSex方法返回出来
// echo $person->sex;
echo $person->getSex();
echo '<hr>';

class Man extends Person{
    public function getAge()
    {
        return $this->age;
    }
    public function getSex()
    {
        return $this->sex;
    }
}

$man=new Man('小王',42,'男');

// age属性是protected不可以在类外访问,但可以在子类中访问,通过getAge方法返回出来
// echo $man->age;
echo $man->getAge();
// sex属性是private不可以在类外访问,也不可以在子类中访问。
// echo $man->sex;
// echo $man->getSex();

运行实例 »

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


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