php——14-面向对象的继承 和 访问控制修饰符

版权声明:未经同意,不得随意转载转载 https://blog.csdn.net/lucky541788/article/details/82940532

普通类

无继承的代码很繁琐(其中 Dog 类的 $name 属性和 shout 方法重复定义)

<?php

class Animal
{
    public $name = 'Animal';

    public function shout()
    {
        echo "动物叫。";
    }
}

class Dog
{
    public $name = 'Dog';
    public $owner = 'tom';

    public function shout()
    {
        echo "狗叫。";
    }

    public function swim()
    {
        echo "狗会游泳。";
    }
}

继承类

<?php

class Animal
{
    public $name = 'Animal';

    public function shout()
    {
        echo "动物叫。";
    }

    public function hello()
    {
        echo "今天天气好!";
    }
}

/*
 * php继承的语法
 * 子类 extends 父类{...}
 */

class Dog extends Animal
{
    public $owner = 'tom';

    public function swim()
    {
        echo "狗会游泳。";
    }

    public function hello()
    {
        echo "我叫MT!";
    }
}

$dog = new Dog();
//继承自父类
echo $dog->name;//Animal
$dog->shout();//动物叫

//子类
echo $dog->owner;//tom
$dog->swim();//狗会游泳。

//子类覆盖掉父类的方法
$dog->hello();//我叫MT!

构造函数的继承

注意:子类不能继承父类的私有属性和方法

<?php

class Animal
{
    public $name = 'Animal';
    private $age='10';

    public function __construct($name = 'Animal')
    {
        echo "父类方法被调用";
        $this->name = $name;
    }
}

/*
 * php继承的语法
 * 子类 extends 父类{...}
 */

class Dog extends Animal
{
    public $owner = 'tom';
}

$dog = new Dog('Lucy');//父类方法被调用
echo $dog->name;//Lucy

//子类不能继承父类的私有属性和方法
echo $dog->age;//报错

访问控制修饰符

private、protected、public
以属性为例 方法也是一样的
在这里插入图片描述
类内 和 全局:

<?php


class Person
{
    public $name = 'bob';
    protected $age = 22;
    private $money = 100;

    public function intro()
    {
    	//类内
        echo 'my name is ' . $this->name . '; '; //my name is bob;
        echo 'i am ' . $this->age . ' years old' . '; '; //i am 22 years old;
        echo 'i have ' . $this->money . ' $' . '; '; //i have 100 $;
    }
}

$bob = new Person();

$bob->intro();

//类外
echo $bob->name;//bob
echo $bob->age;//报错  protected修饰的属性和方法,不能在类外访问
echo $bob->money;//报错  private修饰的属性和方法,不能在类外访问

子类中 和 全局:

<?php

class Person
{
    public $name = 'bob';
    protected $age = 22;
    private $money = 100;
}

class Child extends Person
{
    public function __construct()
    {
    	//子类中
        echo $this->name;//bob
        echo $this->age;//22
        echo $this->money;//报错  private修饰的属性和方法,不能在子类访问
    }
}

$child = new Child();
//类外
echo $child->name;//bob
echo $child->age;//报错  protected修饰的属性和方法,不能在子类访问
echo $child->money;//报错  private修饰的属性和方法,不能在子类访问

猜你喜欢

转载自blog.csdn.net/lucky541788/article/details/82940532
今日推荐