類別class
class.php
<?php //class.php
echo "<head>
<meta charset='utf-8'>
<meta name='description' content='Free Web Tutorial'>
<meta name='author' content='wwesbake'>
</head>
";
class Dog
{
public $age;
public function sayAge()
{
echo "我的年齡 {$this->age} 歲";
}
}
$myDog = new Dog();
$myDog->age=1;
$myDog->sayAge();
?>
__condtruct(建構子)以及__destruct(解構子)
class Dog
{
public $age;
//規定建立類別一定要給年齡參數
public function __construct($age)
{
echo "旺旺旺, 我誕生了!<br>";
$this->age=$age;
//前面是類別自身屬性,後方是建立物件時傳入的值
}
public function sayAge()
{
echo "我的年齡{$this->age} 歲";
}
public function __destruct()
{
echo "<br/> PHP程式執行結束 Dog Class關閉";
}
}
$myDog = new Dog(1); //建立實體物件執行__construct()內的動作
$myDog->sayAge();
說明:
public $age; 1.<--屬性
public function satAge()
{
echo "我的年齡 $this->age 歲"; 2.<--方法
} 3.使用自身的屬性要加$this關鍵字
注意:
要在方法中使用自身類別的屬性,必須使用關鍵字$this來取得屬性值,只使用$age會讀不到值,必須使用$this->age。
繼承(Extends)
<?php //extend.php
echo "<head>
<meta charset='utf-8'>
<meta name='description' content='Free Web Tutorial'>
<meta name='author' content='wwesbake'>
</head>
";
class Animal
{
public $age;
public function sayAge()
{
echo "我的年齡 {$this->age} 歲";
}
}
class Dog extends Animal
{
//內容為空
}
class Cat extends Animal
{
//內容為空
}
$myDog = new Dog();
$myDog->age=1;
$myDog->sayAge();
echo "<br/>--HR--<br/>";
//產生了新的物件
$myCat = new Cat();
$myCat->age=2;
$myCat->sayAge();
?>
說明:
Animal 類別是 Dog、Cat的父類別,反之Dog、Cat都是Animal的子類別,可以看到子類別的內容都是為空,但Dog、Cat產生實體物件,可以設定年齡以及執行顯示年齡的方法,讓我們不用重複撰寫一樣的程式碼,父子類別它們在意義上是有關係的才使用繼承,以上我們都使用public存取權限,繼承後子類別擁有父類別的所有屬性以及方法。
封裝(Encapsulation)
<?php
echo "<head>
<meta charset='utf-8'>
<meta name='description' content='Free Web Tutorial'>
<meta name='author' content='wwesbake'>
</head>
";
class Animal
{
public $name; //存取權限public
protected $age; //存取權限protected
private $weight; //存取權限private
public function __construct($name, $age, $weight)
{
$this->name = $name;
$this->age = $age;
$this->weight = $weight;
}
public function animalShowData()
{
echo "暱稱: {$this->name} <br>"; //正常讀取
echo "年齡: {$this->age} <br>"; //正常讀取
echo "體重: {$this->weight} <br>"; //正常讀取
}
}
class Dog extends Animal
{
public function dogShowData()
{
echo "暱稱: {$this->name} <br>"; //正常讀取
echo "年齡: {$this->age} <br>"; //正常讀取
echo "體重: {$this->weight} <br>"; //無法讀取
}
}
$myDog = new Dog('多多', 3, '3kg');
//$myDog->animalShowData(); //正常顯示屬性
echo $myDog->name; //正常讀取
echo $myDog->age; //無法讀取
echo $myDog->weight; //無法讀取
//$myDog->dogShowData(); //無法讀取$weight變數
?>
介面(Interface)
一個類別只能繼承單一類別,但可以實作多個介面,介面用於更抽象的定義,例如狗的類別有年齡的方法,人類也有年齡的方法要實作,但計算方式可能略為不同,可以建立Age介面,在其中定義,讀取年齡的方法...如果類別有年齡的特性,可以於該類別使用Age介面,類別就要實作Age介面中定義的所有方法,也可以建立一個Foot介面定義用腳可以跑步、走路...。
//1.介面 Age 使用interface 宣告介面Age
interface Age
{
public function getAge();
}
interface Foot
{
public function run();
public function walk();
}
//2.Dog 類別使用implrmrnts 實作Age介面的定義
class Dog implements Age, Foot
{
public $age;
public function getAge()
{
return $this->age * 7 . "<br>";
}
public function run()
{
return "我用四隻腳跑步<br>";
}
public function walk()
{
return "我用四隻腳走路<br>";
}
}
$dog = new Dog();
$dog->age = 1;
echo $dog->getAge(); // 7
echo $dog->run(); // 我用四隻跑步
echo $dog->walk(); // 我用四隻腳走路
注意介面中只能定義常數以及public 存取權限的抽象方法。