1. 程式人生 > >php——14-面向物件的繼承 和 訪問控制修飾符

php——14-面向物件的繼承 和 訪問控制修飾符

普通類

無繼承的程式碼很繁瑣(其中 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 . '; ';
        echo 'i am ' . $this->age . ' years old' . '; ';
        echo 'i have ' . $this->money . ' $' . '; ';
    }
}

$bob = new Person();

//類內三個都可以呼叫
$bob->intro();//my name is bob; i am 22 years old; i have 100 $;

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修飾的屬性和方法,不能在子類訪問