class A類別 {
}
class B類別 extend A類別 {
}
__construct(建構子)用來執行必要動作,例如:資料庫連線、呼叫父類別的函數、執行前置工作等。
__destruct(解構子)用來執行收尾的工作,例如:關閉資料庫連線、清空不必要的變數等。
註:PHP產生物件時不會自動執行父類別的建構子與解構子,如果要執行父類別的建構子請用parent::__construct(),如果要執行父類別的解構子請用parent::__destruct()。
<?php
class banana{
public function __construct(){
echo "香蕉"."<br/>"; }
}
class apple extends banana{
public function __construct(){
echo "蘋果"."<br/>"; }
}
class orange extends apple{
public function __construct() {
echo "橘子"."<br/>"; }
}
$apple = new apple;
echo "<hr/>";
$orange = new orange;
echo "<hr/>";
$banana = new banana;
echo "<hr/>";
?>
<?php
class banana{
public function __construct(){
echo "香蕉"."<br/>"; }
public function __destruct(){
echo "<hr>結束 banana 類別"."<br/>"; }
}
class apple extends banana{
public function __construct(){
parent::__construct();
echo "蘋果"."<br/>"; }
public function __destruct(){
// parent::__destruct();
echo "<hr>結束 apple 類別"."<br/>"; }
}
class orange extends apple{
public function __construct(){
echo "橘子"."<br/>"; }
public function __destruct(){
parent::__destruct();
echo "<hr>結束 orange 類別"."<br/>"; }
}
$apple = new apple;
echo "<hr>";
$orange = new orange;
echo "<hr>";
$banana = new banana;
echo "<hr>";
?>
<?php
abstract class Score { // 定義抽象類別
protected $x, $y;
public function setScope($x, $y){
$this->x = $x; $this->y = $y; }
abstract function myScore(); // 定義抽象方法,抽象方法是不可以有內容的
}
class english extends Score{
public function myScore(){ // 覆蓋抽象方法(如果有參數,參數個數必須相同)
echo "英文成績:<br/>"; }
public function getScope()
{ echo "最低分:".$this->x." <br/>最高分:".$this->y."<hr>"; }
}
class chinese extends Score{
public function myScore(){ // 覆蓋抽象方法(如果有參數,參數個數必須相同)
echo "國文成績:<br/>"; }
public function getScope()
{ echo "最低分:".$this->x." <br/>最高分:".$this->y."<hr>"; }
}
//$Score = new Score; //抽象類別是不能產生物件的
$english = new english;
$english-> myScore();
$english-> setScope(60,90);
$english-> getScope();
$chinese = new chinese;
$chinese-> myScore();
$chinese-> setScope(75,95);
$chinese-> getScope();
?>
<?php
interface fruit { // 介面僅定義方法,不可以宣告成員或屬性
public function setname($name);
public function operation();
}
class apple implements fruit { // 實作介面 (可以視為 -> 父介面的定義方法)
private $fruitname;
public function setname($fruitname){ $this->fruitname=$fruitname; }
public function operation(){
echo "水果名稱:".$this->fruitname."<br/>";
echo "這是蘋果"."<hr>";
}
}
class orange implements fruit { // 實作介面 (可以視為 -> 父介面的定義方法)
private $fruitname;
public function setname($fruitname){ $this->fruitname=$fruitname; }
public function operation(){
echo "水果名稱:".$this->fruitname."<br/>";
echo "這是橘子"."<hr>";
}
}
// $fruit = new fruit //介面不可以產生物件
$apple = new apple;
$apple->setname("蘋果");
$apple->operation();
$orange = new orange;
$orange->setname("橘子");
$orange->operation();
?>
註:在PHP類別內不可以設計兩個同名的方法,否則會出現錯誤訊息。
<?php
class nature{
public function __construct()
{ echo "在自然界中:"."<hr>"; }
}
class people extends nature {
public function __construct() {
parent::__construct();
echo "人是萬物之靈"."<br>";
}
public function brain()
{ echo "擁有聰明的頭腦"."<br>"; }
}
class robot extends people{
public function __construct()
{ echo "人製造機器人"."<br>"; }
public function brain()
{ echo "機器人僅有AI頭腦"."<br>"; }
}
$people = new people;
$people->brain();
echo "<hr>";
$robot= new robot;
$robot->brain();
echo "<hr>";
?>