php——14-面向物件的繼承 和 訪問控制修飾符
阿新 • • 發佈:2018-12-13
普通類
無繼承的程式碼很繁瑣(其中 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修飾的屬性和方法,不能在子類訪問