PHP Object Oriented Programming ตอนที่ 1 (PDF)

Document Sample
PHP Object Oriented Programming ตอนที่ 1 (PDF) Powered By Docstoc
					OOP in PHP ตอนท 1
สวสดครบ ในบทความนเราจะกลาวถงการนาเอาภาษาโปรแกรม PHP มาเขยนในร#ปแบบของ Object Oriented Programming โดยในบทความนเราจะไมกลาวถงพ& นฐานของภาษา PHP มากนก โดยบทความนจะเหมาะกบผ#,ทเขยนและใช,ภาษาโปรแกรม PHP มาบ,างแล,ว โดยถ,าใช,อย# ในระดบการใช, Function มากอนนาจะชวยทาให,เข,าใจ และทาให,เห6นภาพได,มากขนครบ

มาสรางโลกนอย ๆ ในการเขยนโปรแกรมก*นดกว-า
กอนอ& - น เราต, อ งปรบความค8 ด ในการเขยน PHP จากการเขยนแบบลาดบขนจากบนลงลาง (Structural หร& อ Procedural Programming) มาเปCนการเขยนแบบเช8งวตถD (Object Oriented Programming) เสยกอน โดยการเขยนโปรแกรมเช8งวตถDนน เปCนการเขยนโปรแกรมให,เข,าใกล,การดาเน8นไปตามสภาพแวดล,อมท-เปCนจร8ง ของโลกเรา กลาวค&อ เรามองทDกอยางในการเขยนโปรแกรมเปCนด-งการดารงอย#ของส8-งตาง ๆ บนโลกนนนเอง โดยทDก ๆ ส8-งบนโลกนมกเก8ดจากแมแบบ (Class) แทบทงส8น ซ-งแมแบบเหลานนนจะมส8-งท-จาเปCนอย# 2 สวนค&อ คDณสมบต8 (Properties) และแบบแผนพฤต8กรรม (Method Behavior หร7อ Method) อาจจะมความเหม&อนหร&อตางกนทงใน คDณสมบต8และพฤต8กรรม โดยผลของแบบแผนพฤต8กรรมนนจะได,รบเปCนแบบใด ขนอย#กบคDณสมบต8ในชวงเวลานน ๆ ซ-งจะอธ8บายให,เห6นภาพชดเจนได,งายขนดงตวอยางด,านลาง ผ#,เขยนจะขอยกตวอยางท-ง ายกอน โดยอยากให,มองถงคาวา “มน9ษย;” เปCนแมแบบ ทDก ๆ คนบนโลกนเก8ดจาก แมแบบ (Class) “มนDษยQ” ซ-งวตถD (Object) ท-เก8ดจากแมแบบ โดยคDณสมบต8 (Properties) ก6จะช&-อเรยกแตกตางกนไป, มความส#ง, นาหนก, เพศ และสวนประกอบทางรางกายท-แตกตางกน ซงส8-งเหลานค&อคDณสมบต8 (Properties) ของ “มนD ษยQ” โดยจะมพฤต8กรรม (Method) ท-เหม&อน ๆ กนโดยพ&นฐานของ “มนDษยQ” ซ-งได,แก การก8น, นอนหลบ, ว8-งและเด8น สองขา ฯลฯ ซ-งถ&อเปCนพฎต8กรรมพ&นฐานของแมแบบน ถ,าเราเขยนเปCนภาพให,เห6นชดเจนขนก6จะได,ดงร#ปน

ภาพแสดงแมแบบ และวตถD

จากร# ปเราจะเห6 นวา “Obj1”และ “Obj2” นนมร# ปแบบพฤต8ก รรมและคD ณ สมบต8 เหม& อ นกนแมแบบ มน9ษย; แต คDณสมบต8ของทงสองวตถDนนได,ถ#กกาหนดตอมาให,แตกตางกน ทาให,ผลของพฤต8กรรมนนแตกตางกนไปตามข,อม#ล ของคD ณ สมบต8ท - เ ปล- ย นแปลงไป เชน Obj1 นนมความส# ง 168 ซม. , นาหนก 48 กก. และเปC น เพศหญ8 ง ซ- งม คDณสมบต8แตกตางกบ Obj2 ท-มความส#ง 179 ซม. , นาหนก 65 กก. และเปCนเพศชาย กลาวค&อในสภาวะเปCนจร8งแล,ว ความแตกต-างของท*?งของว*ตถ9ท*?งสองน*?นถAกกBาหนดจากค9ณสมบ*ตF ซH งทBาใหการผลของพฤตFกรรมน*?นแตก ต-างก*น แมจะเกFดจากแม-แบบเดยวก*บกMตาม สร9ปว-า “แมแบบ (Class) มความเปCนนามธรรม (Abstract) และวตถD (Object) มความเปCนรAปธรรม (Concrete)” โดยคDณสมบต8ตาง ๆ ของวตถDนนต,องมการหอหD,มอย#ภายใน (Encapsulation ) ซ-งทาให,คDณสมบต8ของข,อม#ลนน ถ#กต,องเสมอ โดยจากตวอยางท-แล,วนนในกรณของคDณสมบต8ของเพศนน จะต,องอย#ภายใต,เง&-อนไขของเพศชาย และ หญ8งเทานน จงจาเปCนต,องมตวควบคDมคDณสมบต8 หร&อแบบแผนพฤต8กรรม เข,ามาเก-ยวข,องซ-งจะได,กลาวตอไป โดย ความถ#กต,องของข,อม#ลภายในนนสาคญมาก เพราะน-นหมายถงการแสดงคDณสมบต8ท-ถ#กต,องของวตถDนนๆ ด,วย รวม ถงถ,าเรามองในด,านการเขยนโปรแกรมแล,ว การหอหD,มภายในนนชวยให,การด#แลรกษาและพฒนาชDดคาส-งนนทาได, งายขน เพราะชDดคาส-งได,ถ#กแยกออกเปCนสวน ๆ และยงบอกถงพฤต8กรรมของส8-งท-ห อหD,มด,วยวาควรเปCนพฤต8กรรม อะไร และเม&-อเราพบพฤต8กรรมนน ๆ แล,วผลของพฤต8กรรมนนจะให,ข,อม#ลและผลการทางานออกมาเปCนอะไรด,วย

ภาพแสดงการหอหD,มภายในคDณสมบต8

คDณสมบต8ท-ทาให,การเขยนโปรแกรมเช8งวตถDนนได,รบความน8ยมมาก ค&อการส&บทอด (Inheritance) ของแมแบบ (Class) ท-ทาให,ล#กแบบ (Sub-Class) นนมความเฉพาะเจาะจงมากขนไปอกไปอก และยงชวยให,การสร,างสรรคQงาน นนทาได,ง ายเพราะเราไมจาเปCนต,องเขยนโปรแกรมหลาย ๆ อยางซา ๆ กนในแมแบบท-มคDณสมบต8เหม&อน ๆ กน เชนแมแบบ “ยานพาหนะ” มล#กแบบ ช&-อได,แก รถยนตQ, รถจกรยานยนตQ และจกรยาน เปCนต,น ซ-งทง 3 ล#กแบบทกลาวมานนมคDณสมบต8บางอยางท-เหม&อนกนจนได,เปCนยานพาหนะ เชนความส#ง, ความกว,าง และความเร6วในการ เคล&-อนท-เปCนต,น ซ-งการแบงเปCนล#กแบบนทาให,ความเฉพาะเจาะจงของล#กแบบมมากขนทาให,การสร,างวตถDใด ๆ จาก ล#กแบบเหลานนนมคDณสมบต8ท-เท-ยงตรงตอการแสดงพฤต8กรรมได,มากขนด,วย และลดการซบซ,อนของโครงสร,างแม แบบลงได,มาก เพราะได,ถ#กกาหนดคDณสมบต8หลก ๆ ไว,แล,วในแมแบบ ทาให,ล#กแบบมความซบซ,อนน,อยลง

การส&บทอดคDณสมบต8

การส&-อสารกนของวตถD

ในการสงข,อม#ลระหวางวตถDนนเราเรยกวาการสงข,อความ (Messaging) ซ-งข,อความ (Message) นนจะถ#กสงผาน แบบแผนพฤต8กรรม (Method) เพ&-อตรวจสอบความถ#กต,องของข,อความท-จะเข,าหร&อออกจากวตถD (Object) กอนท-จะ ทาการประมวลข,อความนนเพ&-อแก,ไขข,อม#ลหร&อคDณสมบต8 (Properties) ภายในวตถD ซ-งการตรวจสอบนเปCนไปตาม หลกการหอหD,มข,อม#ลภายใน เพ&-อปhองกนไมให,วตถDทางานผ8ดไปจากพฤต8กรรมท-กาหนด โดยขอยกตวอยาง ท-เข,าใกล, กบชว8ตประจาวน โดยเรามนาย ก. และนาย ข. ซ-งเก8ดจากแมแบบ มนDษยQ ซ-งนาย ก. ได,ทาการถาม อายDนาย ข. โดย ท-นาย ข. นนจะตอบอายDกลบไปก6ได,หร&อไม ขนอย#กบคDณสมบต8บางประการของวตถDน น ๆ เชนเพศ เปCนต,น โดยทนาย ข. เปXนเพศชาย อาจจะตอบกลบไปในทนท แต-ในกรณทเปXนเพศหญFงอาจจะไมตอบกลบข,อความนกลบไป ซ-งจากตวอยางดงกลาวจะเห6นได,วาการสงข,อความไป และกลบนนจะได,ผลตอบรบอยางไรนน ขนอย#กบคDณสมบต8 ณ. เวลาใดเวลาหน-งของวตถDในเวลานน ๆ และวตถDแตละวตถDนนจะมความเปCนอ8สระกนของคDณสมบต8 เหม&อนดงตวอยาง ท- นาย ก. และนาย ข. ไมได,เปCนคนเดยวกนนนเอง โดยยงมคDณสมบต8การกระทาหลายร#ปแบบ (Polymorphism) ซ-งจะไมขอผ#,ถงในตอนน เพราะอาจทาให,งงได, ผ#, เขยนจะขอพ#ดถงในระดบท-ส#งตอไป จากท-เราได,ศกษาจากข,อม#ลด,านบนนนเราได,สรDปสวนท-สาคญในการพฒนาของ Object Oriented Programming ไว,ดงตอไปน
● ● ● ● ●

แมแบบ (Class) ล#กแบบ (Sub-Class) วตถD (Object) การสงข,อความ (Messaging) ข,อความ (Message)

● ● ● ● ●

การหอหD,มข,อม#ล(Encapsulation) การส&บทอด (Inheritance) การทาหลายร#ปแบบ (Polymorphism) คDณสมบต8 (Properties) แบบแผนพฤต8กรรม (Method Behavior)

“สว*สดชาวโลก” ก*บ PHP บนโลกแห-งความจรFง
ในบทความนทางผ# ,เขยนจะอ, างอ8 งกบ PHP Version 4 กอน เพราะมข, อกาหนดท-ไมยD งยาก และเหมาะแกการนามาศกษา มากกวา PHP Version 5

โดยในการเขยนแบบโปรแกรมเช8งวตถDใน PHP นนไมยาก โดยคาท-ใช,เปCนคาหลก (Keyword) ในการเขยนได,แก class, function, this และ parent เปCนต,น จากตวอยางในชวงแรกผ#,เขยนจะสร,าง แมแบบ (Class) human ขนมากอน โดยว8ธการสร,างแมแบบใน PHP มดงน 1. คาหลกท-เราจะใช,นนค&อ class 2. หลงคาหลก class ตามด,วยช&-อแมแบบ (classname) 3. เปrดและปrดด,วยเคร&-องหมายปsกกา เพ&-อกาหนดชวง การเขยนชDดคาส-งของแมแบบ ร#ปแบบคาส-งท- 1

<?php class classname { } ?>

เม&-อเราร#,รปแบบการสร,างแมแบบแล,ว เราจะมาสร,างแมแบบเพ&-อใช,งานจร8งกนเลย #
<?php class human { } ?>

ชDดคาส-งท- 1 จากชDดคาส-ง (Source Code) ท- 1 นเปCนเพยงการประกาศแมแบบเทานน ซ-งไมสามารถทางานได,
<?php class human { function Talk(){ echo “Hello World”; } } ?>

ชDดคาส-งท- 2 ทาให,เก8ดชDดคาส-งท- 2 ซ-งเราได,เพ8-มพฤต8กรรม (Method) ลงไป โดยผมขอยกตวอยางวาให,วตถDใด ๆ ท-สร,างจาก แมแบบ human นนสามารถพ8มพQคาวา “Hello World” ออกมาได,โดยใช,ผ านพฤต8กรรมท-ช&-อวา “Talk” มาเปCนหวข,อ ตวอยาง โดยการเขยนพฤต8กรรมในแมแบบนนก6เขยนร#ปแบบเดยวกบฟxงกQชนท-ว ๆ ไปท-เราคD,นเคยกนใน PHP แบบ เด8ม ๆ น-นเอง โดยใช,คาหลกค&อ function และตามด,วยช&-อพฤต8กรรม ซ-งการประกาศ function ในแมแบบนก6เหม&อน กบ function โดยท-วไปนนเอง โดยจากตวอยางชDดคาส-งท- 2 นเราจะสร,างวตถDจากแมแบบท-เขยนขนมาทางาน โดย ใช,คาหลก new โดยร#ปแบบการสร,างวตถDขนมานนมดงน
$objectname = new classname();

ร#ปแบบคาส-งท- 2 จากร#ปแบบคาส-งท- 2 นจะเห6นร#ปแบบการสร,างวตถDโดยท- $objectname นเปCนช&-อของช7ออางอFงว*ตถ9 หร&อเรยก วาต*วแปรอางอFงก6ได, โดยท-ตวแปรนจะไปอ,างอ8งกบวตถDท-เราสร,างขนในหนวยความจาอกท โดยหลกการตงช&-อตว แปรอ,างอ8งกบวตถDนนจะเหม&อนกบตวแปรท-วไปทDกประการ
<?php class human { function Talk(){ echo “Hello World”; } } $somsak = new human(); $somsak->Talk(); ?>

ชDดคาส-งท- 3 โดยจากชDดคาส-งท- 3 เราจะได,วตถDท-มตวแปรอ,างอ8งท-ช&-อวา “somsak” เม&-อเรามาด#ตวอยางความสมพนธQระหวาง แมแบบ, ตวแปรอ,างอ8งวตถD และวตถD ได,จากภาพด,านลางน วามความสมพนธQกนอยางไร

ภาพแสดงความสมพนธQท- 1 จากภาพแสดงความสมพนธQท- 1 นจะเห6นวามวตถDอย# 1 วตถDอย#ในหนวยความจาโดยมตวแปรอ,างอ8งกบวตถDนช&-อ วา somsak อกท โดยท-ว ตถDน เก8ดจากแมแบบ human นนเอง ซ-งจากชDดคาส-งส-งดงกลาวนนก6ม การให,พ8มพQค าวา Hello World ออกมา ดง “ผลดงผลการทางานของชDดคาส-งท- 3”
Hello World

ผลการทางานของชDดคาส-งท- 3 โดยเราจะสงเกตเห6นเคร&-องหมายอางอFง -> (Reference/Arrow Operator) ซ-งเปCนการชไปยงคDณสมบต8ภายใน หร& อ เรยกใช, พ ฤต8 ก รรมใด ๆ ในวตถDน น ๆ โดยด# ได, จ ากชD ดคาส- งท- 3 ท-ต วแปรอ, า งอ8 งวตถD somsak เพ& - อ เรยกใช, พฤต8กรรม Talk ขนมาน-นเองซ-งจากชDดคาส-งท- 3 นเราจะมาวาดภาพเปCนแมแบบ และวตถDกน เพ&-อให,เราจะได,เช&-อม โยงความค8ดระหวางชDดคาส-งและแนวค8ดการเขยนโปรแกรมเช8งวตถD

ภาพแสดงความสมพนธQท- 2 โดยจากภาพแสดงความสมพนธQท- 2 นเปรยบเทยบกบชDดคาส-งท- 3 นนเราจะเห6นวาตวแปรอ,างอ8งวตถD somsak นนไปอ,างอ8งกบวตถDท-เก8ดจากแมแบบ human ซ-งและเม&-อเก8ดขนมาแล,วนน ตวแปรอ,างอ8งวตถDก6ท าการส-งเรยกใช, พฤต8กรรม “Talk” โดยภาพนจะเห6นวาวตถDท-ตวแปรอ,างอ8ง somsak ไปอ,างอ8งอย# และได,ส-งให,พฤต8กรรม Talk ทางาน ขนโดยพ8มพQคาวา “Hello World” ออกมา

มาเรFมเขยนต*วละครฉบ*บ PHP ก*นดกว-า
จากชDดคาส-งท- 1-3 และภาพแสดงความสมพนธQทงสองร#ปท-ได,แสดงไปแล,วนน จะเห6นได,วาเม&-อเราเขยนโปรแกรม แบบเช8งวตถDก6เหม&อนกบเราเขยนบทละครให,แตละวตถDท าส8-งใด ๆ ก6ตามท-เราต,องการ โดยกาหนดตวแปรอ,างอ8ง หร&อความหมายหน-งก6ค&อการสร,างช&-อนกแสดงอกทหน-งเพ&-องายตอการจดการคDณสมบต8และแสดงพฤต8กรรมให,ตรงกบ วตถDน น ๆ โดยตวอยางท-ได,กลาวไปนนอาจจะยงไมเห6นภาพมากนก เรามาด#ต อวาเม& - อแมแบบนนมการกาหนด คDณสมบต8เพ8-มเข,ามาจะทาให,ผลของพฤต8กรรมเปล-ยนไปและแตกตางกน ซ-งเราจะมาด#วาทาให,เก8ดความแตกตางกน ได, อยางไร โดยเรากาหนดคD ณ สมบต8 แ ละพฤต8 ก รรมดงตอไปน ช& - อ แมแบบค& อ human โดยท- แมแบบ human ม ค9ณ สมบ*ต F (Properties) ค& อ ช7 อ, ความสA ง , น?Bาหน* ก , อาย9 และเพศ และมพฤตFก รรม (Method) ค&อ บอกช7 อ, บอกความสAง, บอกน?Bาหน*ก และบอกเพศ ได,

เม&-อได,ร#ปแบบท-ต,องการแล,วเราก6จะมาเขยนชDดคาส-งกนเลย
<?php class human { var $name = “human”;// default name = “human” var $sex = 1; // default = 1 and 1 = male, 2 = female var $height = 0; // height > 0 var $weight = 0; // weight > 0 var $age = 0; // age > 0 function showName(){ return $this->name; } function showSex(){ return $this->sex; } function showHeight(){ return $this->height; } function showWeight(){ return ($this->sex == 2 ? 'No Answer' : $this->weight); } function showAge(){ return ($this->sex == 2 ? 'No Answer' : $this->age); } } ?>

ชDดคาส-งท- 4 จากชDดคาส-งท- 4 น เราได,พบคาหลกอกคาค&อ var โดยคานเปCนคาหลกท-ใช,กาหนดคDณสมบต8เร8-มต,นของแมแบบ ซ-งเปCน ดงข,อกาหนดวาเม&-อสร,างวตถDขนแล,วคDณสมบต8ดงกลาวจะต8ดตวไปกบวตถDนน ๆ ด,วย ซ-งคDณสมบต8นนจะแยก อ8สระออกจากวตถDอ&-น ๆ โดยร#ปแบบการเขยนคDณสมบต8ก6ค&อ
var $propertyname;

ร#ปแบบคาส-งท- 3 โดยท-หลงคาหลก var จะตามด,วยช&-อคDณสมบต8 $propertyname ซ-งการตงช&-อคDณสมบต8น นก6ใช,หลกการตงช&-อ แบบเดยวกบตวแปรโดยท-วไป โดยการเรยกใช,คDณสมบต8 และพฤต8กรรมภายในแมแบบเดยวกนนนจะใช,ผ านคาหลกท-ช&-อ this ซ-งเราจะทาการ อ,างอ8งกบช&-อคDณสมบต8หร&อพฤต8กรรมอกทหน-งโดยใช,เคร&-องหมายอ,างอ8ง -> เข,ามารวมการทางานโดยว8ธการเขยนค&อ
$this->propertyname; $this->methodname(<parameter*>);

ร#ปแบบคาส-งท- 4 โดยท- $this มความหมายวา “การเช7อมโยงค9ณสมบ*ตF และพฤตFกรรมของตนเอง” ซ-งในร#ปแบบคาส-งท- 4 นก6 ได,มตวอยางการอ,างอ8งถงพฤต8กรรม ซ-งพฤต8กรรมนเราสามารถเรยกใช,ได,เหม&อน ๆ กบฟxงกQชนท-วๆ ไปและรวมไป ถงการสงพารQราม8เตอรQตาง ๆ เข,าไปได,ด,วย จากตวชDดคาส-งท- 4 เรานามาสร,างวตถDเพ&-อพ8สDทธ8zวาวตถDนน ๆ มความเปCนอ8สระตอกน โดยเราจะสร,างวตถD 2 วตถD ท-มช&-ออ,างอ8งวา somsak และ somying โดยท-กาหนดให,ช&-อ Somsak เปCนผ#,ชาย มอายD 28 ปs, ความส#ง 178 ชม. นา

หนก 65 กก. และ somying เปCนผ#,หญ8ง มอายD 25 ปs, ความส#ง 168 ชม. นาหนก 48 กก. เม&-อกาหนดเสร6จแล,ว เราจะ บอกให,วตถDทงสองบอกข,อม#ลของตวเองผานพฤต8กรรมท-ได,กาหนดไว,ในชDดคาส-งท- 4 ท-ได,เขยนไว,กอนหน,าน ได,ดงน
$somsak = new human(); $somsak->name = 'Somsak'; $somsak->sex = 1; $somsak->height = 178; $somsak->weight = 65; $somsak->age = 28; echo 'Name : '.$somsak->showName().'<br />'; echo 'Sex : '.$somsak->showSex().'<br />'; echo 'Height : '.$somsak->showHeight().'<br />'; echo 'Weight : '.$somsak->showWeight().'<br />'; echo 'Age : '.$somsak->showAge().'<br />'; $somying = new human(); $somying->name = 'Somying'; $somying->sex = 2; $somying->height = 168; $somying->weight = 48; $somying->age = 25; echo 'Name : '.$somying->showName().'<br />'; echo 'Sex : '.$somying->showSex().'<br />'; echo 'Height : '.$somying->showHeight().'<br />'; echo 'Weight : '.$somying->showWeight().'<br />'; echo 'Age : '.$somying->showAge().'<br />';

ชDดคาส-งท- 5 จากตวอยางชDดคาส-งดงกลาวนเราจะได,คาตอบของผลการทางานดงตอไปน
Name : Somsak Sex : male Height : 178 Weight : 65 Age : 28 Name : Somying Sex : female Height : 168 Weight : No Answer Age : No Answer

ผลการทางานของชDดคาส-งท- 5 จากชDดคาส-งท- 5 และผลการทางานนบอกเราวาวตถDท-สร,างจากแมแบบ human นนเม&-อถ#กกาหนดคDณสมบต8ว า เปCนเพศชายแล,วถ,าเราส-งให,แสดงอายDและนาหนกก6จะแสดงออกมา แตถ,าถ#กกาหนดคDณสมบต8เปCนเพศหญ8งแล,วกลบ ไมแสดงอายDและนาหนกออกมาให,เรา ซ-งเก8ดจากการท-เราได,กาหนดในพฤต8กรรมนในแมแบบไว,แล,ววา โดยอย# ใน พฤต8กรรมท-ช&-อ showAge และ showWeight วาถ,าเปCนเพศหญ8งจะ No Answer ออกมา ด,วยเหตDผลบางประการ ;P จากตวอยางนยงมจDดออนเร&-องของการตงคาคDณสมบต8หลายอยาง เชนการกาหนดเพศนนจะต,องเปCน 1 ท-เปCนเพศ ชายและ 2 ท-เปCนเพศหญ8งซ-งถ,าเราตงคาคDณสมบต8โดยตรงแบบชDดคาส-งท- 5 นนจะทาให,ข,อม#ลคDณสมบต8ผ8ดเพยนไป จากท-ควรจะเปCนเราจงจาเปCนต,องปรบเปล-ยนการตงคาคDณสมบต8ใหมโดยทางานผานพฤต8กรรมแทนซ-งชวยในการ กรองข, อม# ลให,เ รากอนทาการตงคาให,ก บคDณ สมบต8จร8ง ๆ ซ-ง เปC นคD ณสมบต8ท - อย# ในข, อกาหนดการหอหD , ม ภายใน (Encapsulation) นนเอง โดยตามข,อกาหนดท-ร#,โดยท-วกนในวงการการเขยนโปรแกรมเช8งวตถDว าการตงคาให,ก บ

คDณสมบต8นนต,องใช,คาขนต,นวา “set” ท-แปลวา ต*งค-า และการเรยกใช,คาคDณสมบต8นนใช,คาขนต,นวา “get” ท-แปลวา ? เขาถHง แล,วตามด,วยช&-อคDณสมบต8นน ๆ เพ&-องายตอการเรยกใช,และส&-อความหมายมากขน ทางผ#,เขยนจงขอนาชDดคา ส-งท- 5 มาปรบปรDงให,ดขนไปอก
<?php class human { var $name = “human”;// default name = “human” var $Sex= 1; // default = 1 and 1 = male, 2 = female var $height = 0; // height > 0 var $weight = 0; // weight > 0 var $age = 0; // age > 0 function setName($value = 'human'){ $this->name = $value; } function setSex($value = 1){ $this->Sex = ($value == 1 || $value == 2 ? $value : 1); } function setHeight($value = 1){ $this->height = ($value > 0 ? $value : 1 ); } function setWeight($value = 1){ $this->weight = ($value > 0 ? $value : 1 ); } function setAge($value = 1){ $this->age = ($value > 0 ? $value : 1 ); } function getName(){ return $this->name; } function getSex(){ return ($this->Sex == 1 ? 'male' : 'female'); } function getHeight(){ return $this->height; } function getWeight(){ return ($this->Sex == 2 ? 'No Answer' : $this->weight); } function getAge(){ return ($this->Sex == 2 ? 'No Answer' : $this->age); } } ?>

ชDดคาส-งท- 6 จากชD ดคาส- งท- 6 จะเห6น ได,ว า ผ#, เขยนนนได, ปรบปรDง จากการใช,ค าวา show เปC นคาวา get แทน และไดเพF ม พฤตFกรรมใหม-ทม set เปXนคBาขH?นตนและตามดวยช7 อต*วแปร โดยสรางขH?นมาเพ7 อใหใชพฤตFกรรมน?ในการ เปลยนแปลงค-าแทนการต*?งค-าใหก*บค9ณสมบ*ตFโดยตรงแบบชDดคาส-งท- 5 โดยในพฤต8กรรม setName, setSex, setHeight, setWeight และ setAge โดยจะมคาเร8-มต,นของการทางานไว,ท-พาราม8เตอรQเปCน 1 ไว,กอนแล,วเพ&-อปhองกนผ#, เขยนโปรแกรมนนล&มใสคาลงไป ซ-งใน setName นนได,กาหนดพาราม8เตอรQต งต,นไว,เชนกน แตเปCนการกาหนดช&-อ human แทน ซ- ง ใน setSex นนได,ม การดกจบคาวาต, อ งมคาเพยง 1 และ 2 เทานน สวน setHeight, setWeight และ setAge ก6ได,ดกจบคาวา คาท-ใสเข,ามานนต,องมคามากกวา 0 เสมอ ซ-งจากท-เราได,ทาแบบนทาให,การตงคาและ เข,าถงคDณสมบต8ตาง ๆ มความถ#กต,องของข,อม#ลมากขนกวาเด8ม เม&-อเรานาไปใช,งานก6จะมร#ปแบบดงชDดคาส-งท- 7 น

$somsak = new human(); $somsak->setName('Somsak'); $somsak->setSex(); <---- ไมไดใสคาลงไป $somsak->setHeight(178); $somsak->setWeight(65); $somsak->setAge(28); echo 'Name : '.$somsak->getName().'<br />'; echo 'Sex : '.$somsak->getSex().'<br />'; echo 'Height : '.$somsak->getHeight().'<br />'; echo 'Weight : '.$somsak->getWeight().'<br />'; echo 'Age : '.$somsak->getAge().'<br />'; $somying = new human(); $somying->setName('Somying'); $somying->setSex(2); $somying->setHeight(168); $somying->setWeight(48); $somying->setAge(25); echo 'Name : '.$somying->getName().'<br />'; echo 'Sex : '.$somying->getSex().'<br />'; echo 'Height : '.$somying->getHeight().'<br />'; echo 'Weight : '.$somying->getWeight().'<br />'; echo 'Age : '.$somying->getAge().'<br />';

ชDดคาส-งท- 7
Name : Somsak Sex : male Height : 178 Weight : 65 Age : 28 Name : Somying Sex : female Height : 168 Weight : No Answer Age : No Answer

ผลการทางานของชDดคาส-งท- 7 จากชDดคาส-งท- 7 และผลการทางานของชDดคาส-งท- 7 นจะเห6นได,วา ในชDดคาส-งท- 7 นนท- $somsak->setSex() นนไมได,ใสคาอะไรลงไปแตผลการทางานนนก6อ อกมาเปC น male เชนเด8ม ซ-งเปCนช& -อตงต,น ของพาราม8เ ตอรQข อง พฤต8กรรมดงกลาว ซ-งชวยให,ข,อม#ลตาง ๆ นนยงคงมความถ#กต,องหร&อ ในบางกรณชวยให,โปรแกรมนนไมทางานผ8ด พลาดไปจากท-ควรจะเปCนในขนตอน จากบทความในตอนท- 1 นเปCนเพยงการปรบพ&นความเข,าใจหลกการทางานของการเขยนโปรแกรมเช8งวตถDเทานน ยงไมได,ลงลกถงการใช,งานท-วไปมากมายนก เพราะถ,าเรายงไมเข,าใจหลกการพ&นฐานแล,วก6ยากท-จะนาไปใช,งานใน ระดบส#งตอไปได,ด โดยในตอนท- 1 นทางผ#,เขยนพยายามใช,ศพทQเทคน8คให,น,อยท-สDด แตบางครงคาไทยท-ใช,อาจทาให, งDนงง ซ-งทางผ#,เขยนก6ได,ทากากบไว,ด,านหลงคาไทยนน ๆ ไว,เพ&-อให,เข,าใจงายขนสาหรบทานท-ใช,ค าเทคน8คเหลาน เปCนประจาครบ สาหรบตอนตอไปนนผมจะแนะนาการนาเอาแมแบบและวตถDท-สร,างนาไปใช,งาน โดยท-เราจะยงไมส&บ ทอดแมแบบ แตใช,งานท-วไปกอนเปCนอนดบแรก

เอกสารอางอFง
● ● ● ●

PHP Manual, http://www.php.net, January 2007 Zend PHP Certification Study Guide, Zend Technologies, August 2004 Concepts of Programming Languages (7th Edition), Robert W. Sebesta, April 2005 The Object Model, http://developer.apple.com/, December 2006


				
DOCUMENT INFO
Shared By:
Stats:
views:793
posted:9/17/2009
language:Thai
pages:10
Description: ก่อนอื่นเราต้องปรับความคิดในการเขียน PHP จากการเขียนแบบลำดับขั้นจากบนลงล่าง ๖ฆะพีแะีพฟส หรือ Procedural Programming) มาเป็นการเขียนเชิงวัตถุ (Object Oriented Programming) เสียก่อน