大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

第6章 類別與物件 – 封裝 6-1 物件導向的基礎 6-2 Java的類別與物件 – 封裝 6-3 類別的建構子
白玉苦瓜 余光中.
第 4 章 PHP 基本語法.
第13章 物件導向與例外處理 13-1 物件導向的基礎 13-2 類別與物件 13-3 類別的繼承 13-4 PHP的例外處理
第一章 面向对象程序设计.
《网页设计与制作》 教学课件 主讲人:湖南铁道职业技术学院 陈承欢
第4章 XML與Java物件導向程式設計 4-1 XML的基礎 4-2 類別與物件 4-3 類別的繼承 4-4 巢狀類別與匿名內層類別
第11章 過載與多形 11-1 方法的過載 11-2 運算子的過載 11-3 再談抽象類別與介面 11-4 多形的基礎 11-5 實作多形.
06 類別與物件. 06 類別與物件 6.1 類別與物件 目前的程式設計主流是物件導向 (OOP),Visual C# 已提供完整的物件導向功能。在物件導向設計裡,物件可以被封裝 ( 保護) 和繼承 ( 重複使用)。因為物件的封裝會使物件受到保護,要存取物件必須透過屬性 (Property)、方法.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
11 繼承類別 11.4 建立者與破壞者 單一建立者與破壞者 11-20
第15章 繼承與多重繼承 15-1 繼承的基礎 15-2 覆寫與隱藏父類別的成員 15-3 子類別的建構與解構子 15-4 多重繼承
C++入門 以Dev C++為例.
第11章 C語言到C++語言 11-1 物件導向程式設計 11-2 青出於藍的C C++的函數特殊功能 11-4 認識類別
C/C++基礎程式設計班 C++:物件導向程式設計 類別的使用 (Class)
Ch07 PHP程式基礎 網頁程式設計.
PHP+MySQL互動式網頁程式設計班 PHP進階語法 講師:林業峻 CSIE, NTU 6/ 19, 2010.
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 9 章 常數.
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
LINQ 建國科技大學 資管系 饒瑞佶.
Java簡介.
JAVA 程式設計與資料結構 第七章 繼承與Interface.
Ch05 繼承 Java程式設計入門(2).
PHP 5 入門基礎 第一個PHP 程式 PHP 資料型態.
5 物件導向程式設計 Object Oriented Programming
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
Managing Inheritance Lecturer:楊昌樺.
生物資訊程式語言應用 Part 3 Perl Language.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
PHP 程式流程控制結構.
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 17 章 物件.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
Instructor Textbook Requirements TAs C++程式設計風格與藝術 (O’Reilly).
表單(Form).
Topic Introduction—RMI
第一單元 建立java 程式.
Ch20. 計算器 (Mac 版本).
第 19 章 XML記憶體執行模式.
精彩Java 2程式設計 <吳逸賢、吳目誠 編著>
Ch09 在網頁之間傳遞資訊 網頁程式設計.
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
CH1 我的第一個App與變數宣告.
JavaScript 语言2 学习网站: 第 4 章 JavaScript 语言2 学习网站:
物件導向系統分析與設計 CH04 物件導向開發方法.
物件導向程式設計 參考書目: 1. 洪維恩,C++ 教學手冊 第三版,旗標出版圖書公司。 2. 陳錦揮,Java 初學指引,博碩文化 3
挑戰C++程式語言 ──第8章 進一步談字元與字串
Graph Theory Chapter 2 An Introduction to Algorithms
XML備份MySQL資料庫 <html> <head>
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
樣版.
C qsort.
OOP9 類別Class.
函數應用(二)與自定函數.
陣列與結構.
12 虛擬函數 12.1 多載與超載 12-2 多載函數 12-2 超載函數 虛擬函數 12-6 同名異式 12-7
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
網頁設計實務- PHP 與資料庫整合.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
第6章 PHP基本語法介紹.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
13 繼承類別 13.1 繼承概論 基礎類別與衍生類別 繼承型式 13-2
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所) PHP 網頁程式設計 PHP 網頁程式設計 第7章 物件與類別 大葉大學 指導教授: 黃鈴玲 學生: 林慶南(工業工程與科技管理所)

outline 物件導向基礎 類別與物件 類別的繼承 PHP的類別與物件函數

7-1-1 物件的基本觀念 從程式的角度來說物件:物件是資料與相關函數結合在一起的組合體 方法 變數 黑盒子

7-1-1 物件的基本觀念 物件 物件擁有兩種特性 車子、電視、書桌、貓、狗…. 狀態(Sate):描述物件的特點,如:車型、排氣量、色彩 行為(Behavior):物件可以做的事,如:發動、停車、加速、換擋

7-1-2 物件導向程式語言 物件導向程式語言需支援 封裝(Encapsulation) 繼承(Inheritance) 將資料(屬性)與操作此資料的函數(方法)包在一起的特性 繼承(Inheritance) 繼承所有父類別所有屬性方法,並可以加以改變的特性 多型(Polymorphism) 繼承同類別建立同名方法處理不同的資料型態,方法名稱相同但程式碼不同同名異式

outline 物件導向基礎 類別與物件 類別的繼承 PHP的類別與物件函數

7-2 類別與物件 成員資料:物件資料部份 PHP變數=常數=屬性 成員函數:物件的行為 類別組成元素 PHP函數=方法 實體 原型、藍圖 建立 成員資料:物件資料部份 PHP變數=常數=屬性 成員函數:物件的行為 PHP函數=方法 類別組成元素

7-2-1宣告類別與建立類別 <!-- 程式範例:Ch7-2-1.php --> <html> <head> <title>宣告類別與建立物件</title> <? // 宣告Time類別 class Time { var $seconds; // 成員變數 var $minutes; var $hours; // 成員函數 function printTime() { echo $this->hours . ":". $this->minutes .":". $this->seconds . "<br>"; } ?> </head> <body> // 建立物件 $now = new Time(); $lasttime = new Time(); $now->hours = 9; // 存取成員變數 $now->minutes = 45; $now->seconds = 20; $lasttime->hours = 16; // 存取成員變數 $lasttime->minutes = 36; $lasttime->seconds = 3; // 呼叫成員函數 echo "現在時間: "; $now->printTime(); echo "上次時間: "; $lasttime->printTime(); </body> </html> 宣告類別後才能建立物件 1.用『 class 』關鍵字來宣告類別 2.用『 var 』關鍵字來宣告成員資料 3.在類別宣告中存取成員變數使用『this->』 運算子來求解,之後變數名稱不需加$ 4.用『 new』運算子來建立物件 使用類別建立的每一個物件稱為『副本(Instances)』 一各類別可以建立多個物件

7-2-2成員資料的存取 PHP的類別宣告可以將成員資料透過成員函數進行存取 成員資料會被類別隱藏起來→資料隱藏

7-2-2成員資料的存取 <!-- 程式範例:Ch7-2-2.php --> <html> <head> <title>成員資料的存取</title> <? // 宣告Time類別 class Time { var $seconds; // 成員變數 var $minutes; var $hours; // 成員函數 function printTime() { echo $this->hours . ":". $this->minutes .":". $this->seconds . "<br>"; } function validTime($s, $m, $h) { // 檢查時間資料是否在範圍內 if ($s < 0 || $s > 60) return false; if ($m < 0 || $m > 60) return false; if ($h < 0 || $h > 24) return false; // 不在範圍內 return true; // 合法時間資料 function setTime($s, $m, $h) { // 檢查時間參數是否合法 if ($this->validTime($s, $m, $h) ) { $this->seconds = $s; // 設定秒 $this->minutes = $m; // 設定分 $this->hours = $h; // 設定時 return true; } else return false; ?> </head> <body> <? // 建立物件 $now = new Time(); $lasttime = new Time(); // 呼叫成員函數 $now->setTime(20, 45, 9); $lasttime->setTime(3, 36, 16); echo "現在時間: "; $now->printTime(); echo "上次時間: "; $lasttime->printTime(); ?> </body> </html>

$bool = Time::validTime(17, 7, 20); 7-2-3類別與成員函數的使用 類別使用介面的習慣用法 設定資料的函數以set為字頭 讀取資料的函數以get為字頭 沒有建立物件的類別呼叫方式使用『::』 $bool = Time::validTime(17, 7, 20);

<!-- 程式範例:Ch7-2-3.php --> <html> <head> <title>類別與成員函數的使用</title> <? // 宣告Time類別 class Time { var $seconds; // 成員變數 var $minutes; var $hours; // 成員函數 function getSeconds(){ return $this->seconds; } function getMinutes(){ return $this->minutes; } function getHours(){ return $this->hours; } function printTime() { echo $this->hours . ":". $this->minutes .":". $this->seconds . "<br>"; } function validTime($s, $m, $h) { // 檢查時間資料是否在範圍內 if ($s < 0 || $s > 60) return false; if ($m < 0 || $m > 60) return false; if ($h < 0 || $h > 24) return false; // 不在範圍內 return true; // 合法時間資料 function setTime($s, $m, $h) { // 檢查時間參數是否合法 if ($this->validTime($s, $m, $h) ) { $this->seconds = $s; // 設定秒 $this->minutes = $m; // 設定分 $this->hours = $h; // 設定時 return true; } else return false; ?> </head> <body> <? // 建立物件 $now = new Time(); $lasttime = new Time(); // 呼叫成員函數 $now->setTime(20, 45, 9); $lasttime->setTime(3, 36, 16); echo "現在時間: "; $now->printTime(); echo "上次時間: "; $lasttime->printTime(); // 取得時間資料 $seconds = $lasttime->getSeconds(); $minutes = $lasttime->getMinutes(); $hours = $lasttime->getHours(); // 顯示時,分和秒 echo $hours . "-" . $minutes . "-" . $seconds . "<br>"; // 呼叫類別方法 $bool = Time::validTime(17, 7, 20); echo "時間 20:7:17 是否合法: [" . $bool . "]<br>"; ?> </body> </html>

7-2-4類別建構子 類別建構子是物件的初始函數,在建立物件時會自動呼叫此函數 建構子與類別同名

<!-- 程式範例:Ch7-2-4.php --> <html> <head> <title>類別的建構子</title> <? // 宣告Time類別 class Time { var $seconds; // 成員變數 var $minutes; var $hours; // 建構子 function Time($s=0, $m=0, $h=12) { // 檢查時間參數是否合法 if ($this->validTime($s, $m, $h) ) { $this->seconds = $s; // 設定秒 $this->minutes = $m; // 設定分 $this->hours = $h; // 設定時 } else { $this->seconds = 0; // 設定秒 $this->minutes = 0; // 設定分 $this->hours = 12; // 設定時 } // 成員函數 function getSeconds(){ return $this->seconds; } function getMinutes(){ return $this->minutes; } function getHours(){ return $this->hours; } function printTime() { echo $this->hours . ":". $this->minutes .":". $this->seconds . "<br>"; function validTime($s, $m, $h) { // 檢查時間資料是否在範圍內 if ($s < 0 || $s > 60) return false; if ($m < 0 || $m > 60) return false; if ($h < 0 || $h > 24) return false; // 不在範圍內 return true; // 合法時間資料 ?> </head> <body> <? // 建立物件 $now = new Time(20, 45, 9); $lasttime = new Time(3, 36, 16); // 呼叫成員函數 echo "現在時間: "; $now->printTime(); // 取得時間資料 $seconds = $lasttime->getSeconds(); $minutes = $lasttime->getMinutes(); $hours = $lasttime->getHours(); // 顯示時,分和秒 echo "上次時間: "; echo $hours . "-" . $minutes . "-" . $seconds . "<br>"; ?> </body> </html>

outline 物件導向基礎 類別與物件 類別的繼承 PHP的類別與物件函數

7-3-1類別繼承的基礎 父類別、基礎類別 子類別、延伸類別 兄弟類別

7-3-2類別的繼承 使用『extends』關鍵字來繼承父類別 子類別呼叫父類別的成員函數,與使用到『 parent ::』關鍵字

<!-- 程式範例:Ch7-3-2.php --> <html> <head> <title>類別的繼承</title> <? // 父類別Vehicle類別 class Vehicle { var $no; // 車號 var $owner; // 所有人 function setNumber($no) { $this->no = $no; } function setOwner($owner) { $this->owner = $owner; } function printVehicle() { // 顯示車輛資料 echo "所有人: " . $this->owner . "<br>"; echo "車號: " . $this->no . "<br>"; } // Car類別宣告, 繼承自Vehicle類別 class Car extends Vehicle { var $doors; // 幾門 // 建構子 function Car($owner, $no, $doors = 4) { parent::setNumber($no); // 呼叫父類別的成員函數 parent::setOwner($owner); $this->doors = $doors; function printCar() { // 顯示轎車資料 echo "====轎車資料====<br>"; parent::printVehicle(); // 呼叫父類別的成員函數 echo "幾門: " . $this->doors . "<br>"; ?> </head> <body> <? // 建立物件 $sentra = new Car("陳會安", 1234567); $civil = new Car("江小魚", 5678924, 2); // 更改所有人 - 呼叫繼承的成員函數 $sentra->setOwner("張無忌"); // 呼叫物件的成員函數 $sentra->printCar(); $civil->printCar(); ?> </body> </html>

7-3-3複寫父類別的成員函數 如果父類別的成員函數不符合需求,在子類別可以宣告同名的成員函數取代赴類別的成員函數複寫(override)

<!-- 程式範例:Ch7-3-3.php --> <html> <head> <title>覆寫父類別的成員函數</title> <? // 父類別Vehicle類別 class Vehicle { var $no; // 車號 var $owner; // 所有人 // 建構子 function Vehicle($owner, $no) { $this->no = $no; $this->owner = $owner; } function printVehicle() { // 顯示車輛資料 echo "所有人: " . $this->owner . "<br>"; echo "車號: " . $this->no . "<br>"; // Car類別宣告, 繼承自Vehicle類別 class Car extends Vehicle { var $doors; // 幾門 function Car($owner, $no, $doors = 4) { parent::Vehicle($owner, $no); // 呼叫父類別的建構子 $this->doors = $doors; // 覆寫父類別的成員函數 // 顯示轎車資料 parent::printVehicle(); // 呼叫父類別的成員函數 echo "幾門: " . $this->doors . "<br>"; ?> </head> <body> <? // 建立物件 $sentra = new Car("陳會安", 1234567); $civil = new Car("江小魚", 5678924, 2); // 呼叫物件的成員函數 $sentra->printVehicle(); $civil->printVehicle(); ?> </body> </html>

outline 物件導向基礎 類別與物件 類別的繼承 PHP的類別與物件函數

7-4PHP的類別與物件函數 函數 說明 class_exits(string) 檢查類別名稱是否存在?? get_class($obj) 傳回參數物件的類別名稱 get_parent_class($obj) 傳回參數物件的父類別名稱 get_object_vars($obj) 傳回參數物件成員資料變數的結合陣列。 get_class_methods(string) 傳回參數類別名稱字串的成員函數陣列 method_exists($obj,string) 檢查參數1有參數2的成員函數名稱?? is_subclass_of($obj,string) 檢查參數1為參數2的子類別??

<!-- 程式範例:Ch7-4.php --> <html> <head> <title>PHP的類別與物件函數</title> <? include "Ch7-4.inc"; ?> </head> <body> <? // 建立物件 if (class_exists("Vehicle")) { $vehicle = new Vehicle(); echo "建立\$vehicle物件<br>"; } if (class_exists("Car")) { $car = new Car("陳會安", 1234567); echo "建立\$car物件<br>"; // 顯示物件所屬的類別 echo "\$vehicle物件是類別: ".get_class($vehicle)."<br>"; echo "\$car物件是類別: ".get_class($car). "<br>"; echo "\$car物件的父類別: ".get_parent_class($car)."<br>"; // 顯示成員變數 echo "\$car物件的成員變數: <br>"; $array = get_object_vars($car); while (list($prop, $val) = each($array)) echo "$prop = $val "; // 顯示成員函數 echo "<br>\$car物件的成員函數: <br>"; $array = get_class_methods(get_class($car)); foreach ($array as $method) echo "$method() "; echo "<br>"; // 檢查物件方法是否存在 if (method_exists($car, "printCar")) echo "\$car物件的printCar()成員函數存在<br>"; if (is_subclass_of($car, "Vehicle")) echo "\$car物件是Vehicle的子類別<br>"; ?> </body> </html>

<!-- 程式範例:Ch7-4.inc --> <? // 父類別Vehicle類別 class Vehicle { var $no; // 車號 var $owner; // 所有人 function setNumber($no) { $this->no = $no; } function setOwner($owner) { $this->owner = $owner; } function printVehicle() { // 顯示車輛資料 echo "所有人: " . $this->owner . "<br>"; echo "車號: " . $this->no . "<br>"; } // Car類別宣告, 繼承自Vehicle類別 class Car extends Vehicle { var $doors; // 幾門 // 建構子 function Car($owner, $no, $doors = 4) { parent::setNumber($no); // 呼叫父類別的成員函數 parent::setOwner($owner); $this->doors = $doors; function printCar() { // 顯示轎車資料 echo "====轎車資料====<br>"; parent::printVehicle(); // 呼叫父類別的成員函數 echo "幾門: " . $this->doors . "<br>"; ?>