OOP in PHP ตอนท ตอนท11 สวสดคร ครบ ในบทความนเราจะกลาวถงการน าเอาภาษาโปรแกรม าเอาภาษาโปรแกรม PHPมาเขยนในร#ปแบบของ Object Oriented Programming โดยในบทความนเราจะไมกลาวถงพ&นฐานของภาษา PHPมากนก โดยบทความนจะเหมาะกบผ#,ทท- เขยนและใช,ภาษาโปรแกรม PHPมาบ,างแล,ว โดยถ,าใช,อย#ในระดบการใช, Functionมากอนนาจะชวยทาให,เข,าใจ และทาให, าให,เห6 เห6นภาพได, นภาพได,มากข มากข นคร นครบ
มาสรางโลกน างโลกนอยๆในการเข อยๆในการเขยนโปรแกรมก* ยนโปรแกรมก*นด นดกวกว-า กอนอ&-นเราต,องปรบความค8ดในการเขยน PHPจากการเขยนแบบลาดบขนจากบนลงลาง (Structuralหร&อ ProceduralProgramming)มาเปCนการเข นการเขยนแบบเช8 ยนแบบเช8งว งวตถD ตถD (ObjectOrientedProgramming)เสยก ยกอน อน โดยการเขยนโปรแกรมเช8งวตถD นน เปCนการเขยนโปรแกรมให,เข, เข,าใกล, ใกล,การดาเน8นไปตามสภาพแวดล,อมท-เปCนจร8 จร8ง ของโลกเรา กลาวค&อ เรามองทDกอยางในการเขยนโปรแกรมเปC ยนโปรแกรมเปCนด นด-งการดารงอย#ของส8-งตาง าง ๆ บนโลกนนนนเอง โดยทDก ๆ ส8งบนโลกน -งบนโลกนมม กเก8ดจากแมแบบ (Class)แทบทงส8น ซ-งแมแบบเหลานนนนจะมส8ส8-งท - -จจา เปCนอย# 2สวนค&อ คDณสมบต8ต8 Behavior หร7อMethod)อาจจะมความเหม&อนหร&อตางกนทงใน (Properties)และแบบแผนพฤต8กรรม (Method Behavior คDณสมบ ณสมบต8ต8และพฤต8 และพฤต8กรรม กรรม โดยผลของแบบแผนพฤต8กรรมน กรรมนนจะได, น จะได,รรบเปCนแบบใด นแบบใด ข ข นอย# อย#กกบคDณสมบ ณสมบต8ตใ8 นชวงเวลานน ๆ ซ - -ซงจะอธ8 งจะอธ8บายให, บายให,เห6 เห6นภาพช นภาพชดเจนได, ดเจนได,งงายข ายข นด นดงต งตวอย วอยางด, างด,านล านลาง าง ผ# ,ผ# ,เขยนจะขอยกตวอยางท- งงา ยกอน โดยอยากให,มองถงคาวา “มน9ษย;” เปCนแมแบบ ทDก ๆ คนบนโลกนเก8ดจาก แมแบบ แบบ (lass)“มนDษยQ ษยQ” ซ - -ซงว งวตถD ตถD (Object)ท - )ทเก8 เก8ดจากแม ดจากแมแบบ แบบ โดยคDณสมบ ณสมบต8ต8 (Properties)ก6จะช& - จะช&อเร อเรยกแตกต ยกแตกตางก างกนไป นไป มความส# ความส#งน งน าหน าหนกเพศ กเพศ และสวนประกอบทางร วนประกอบทางรางกายท - างกายทแตกต แตกตางก างกน ซงส8 - งส8งเหล งเหลาน าน ค&คอคD อ& คDณสมบ ณสมบต8ต8 (Properties)ของ มนD ษยQ” โดยจะมพฤต8กรรม (Method)ท (Method)ท - -เหม& เหม&อน ๆ กนโดยพ& โดยพ& นฐานของ มนDษยQ” ซ -งได,แก การก8นนอนหลบว8 -งและเด8น สองขา ฯลฯ ซ - -ซงถ& งถ&อเปC อเปCนพฎต8 นพฎต8กรรมพ& กรรมพ& นฐานของแม นฐานของแมแบบน แบบน ถ,าเราเข าเราเขยนเปC ยนเปCนภาพให, นภาพให,เห6 เห6นช นชดเจนข ดเจนข นก6 นก6จะได, จะได,ดดงร# งร#ปน ปน
ภาพแสดงแมแบบ แบบ และวตถD ตถD
จากร#ปเราจะเห6นวา Obj1และ Obj2น นมร#ร#ปแบบพฤต8กรรมและคDณสมบต8ต8เหม&อนกนแมแบบ มน9ษย; แต คDณสมบต8ตข8 องทงสองวตถD นนนได,ถ#กก กกาหนดตอมาให,แตกต แตกตางกน ทาให,ผลของพฤต8กรรมน นแตกตางกนไปตามข,อม#ล ของคD ณ สมบต8ต8ทท-เปล-ยนแปลงไป เชน Obj1น นมความส#ง 1ซม.นาหนก 4กก.และเปCนเพศหญ8ง ซ-งม คDณสมบต8ตแ8 ตกตางกบ Obj2ท - Obj2ทมมค วามส#ง 179ซม.น าหนก 5กก.และเปCนเพศชาย นเพศชาย กลาวค&อในสภาวะเปCนจร8งแล,ว ความแตกต-างของท*?งของว*ตถ9ท*ท*?งสองน*?นถAกกาหนดจากค9ณสมบ*ตF สมบ* ตFซงทาใหการผลของพฤตFกรรมน*?นแตก ต-างก* างก*นแม นแมจะเกF จะเกFดจากแมดจากแม-แบบเด แบบเดยวก* ยวก*บก บกตาม ตาม แบบ (lass)มความเปC ความเปCนนามธรรม(bstract)และวตถD ตถD (Object)มความเปC ความเปCนรAปธรรม(Concrete) สร9ปวปว-าาแมแบบ ปธรรม(Concrete) โดยคDณสมบต8ต8ตตา ง ๆ ของวตถDนนนต,องมการหอหD,มอย#ภายใน (Encapsulation )ซ )ซ -งทาให,คDคDณสมบต8ตข8 องข,อม#ลนน ถ#กต,องเสมอ โดยจากตวอยางท-แล,วนนในกรณของคDณสมบต8ตข8 องเพศน องเพ ศนน จะต,องอย#ภายใต, ภายใต,เง&เง&-อนไขของเพศชาย และ แล ะ หญ8งเท งเทานน จงจาเปCนต,องมตตวควบคDมคDณสมบต8ต8 หร& อแบบแผนพฤต8 อแบบแผนพฤต8กรรมเข,ามาเก-ยวข,องซ องซ-งจะได,กลาวตอไป โดย ความถ#กต,องของข,อม#ลภายในน ลภายในนนสาคญมาก เพราะน-นหมายถงการแสดงคDณสมบต8ต8ททถ#-ถก# ต,องของวตถDนนนๆ ด,วย รวม ถงถ,าเรามองในด, าเรามองในด,านการเขยนโปรแกรมแล,ว การหอหD อหD,มภายในนนชวยให,การด#แลรกษาและพฒนาชDดคาส-งนนทาได, งายขน เพราะชDดคาส-งได, งได,ถ#ถก# แยกออกเปCนสวน ๆ และยงบอกถ งบอกถงพฤต8กรรมของส8-งท-หหอ หD,มด,วยวาควรเปCนพฤต8กรรม อะไร และเม& - และเม&อเราพบพฤต8 อเราพบพฤต8กรรมน กรรมน น ๆ แล,วผลของพฤต8 วผลของพฤต8กรรมน กรรมน นจะให, นจะให,ข,ขอม# อ, ม#ลและผลการท ลและผลการทางานออกมาเปC างานออกมาเปCนอะไรด, นอะไรด,วย วย
ภาพแสดงการหอหD , อหD ,มภายในคD มภายในคDณสมบ ณสมบต8ต8
คDณสมบต8ต8ทท-ททาให,การเข การเขยนโปรแกรมเช8งวตถDนนนได,รรบความน8ยมมาก ยมมาก ค&อการส&บทอด (Inheritance)ของแมแบบ (lass)ท - (lass)ทททาให, าให,ล#ล#กแบบ (SubClass)นนม น มความเฉพาะเจาะจงมากขนไปอกไปอก และยงช งชวยให,การสร,างสรรคQ างสรรคQงาน น นทาได,งงายเพราะเราไมจจาเปCนต,องเขยนโปรแกรมหลาย ๆ อยางซา ๆ กนในแมแบบท-มมคDคDณสมบต8ต8เหม&อน ๆ กน เชนแมแบบ ยานพาหนะ” มล#ล#กแบบ ช&-อได,แก รถยนตQรถจกรยานยนตQ และจกรยาน เปCนต,น ซ-งทง 3ล#กแบบทกลาวมานนมคDคDณสมบต8ต8บางอยางท-เหม&อนกนจนได,เปCนยานพาหนะ เชนความส#งความกว,าง และความเร6วในการ เคล& เคล& -อนท-เปC เปCนต, นต,น ซ -ซ -งการแบงเปC งเปCนล#กแบบน แบบน ททา ให,ความเฉพาะเจาะจงของล# ความเฉพาะเจาะจงของล#กแบบมมากขนท าให,การสร, การสร,างวตถD ใด ถD ใด ๆ จาก ล#กแบบเหลาน นนนม นมคDคDณสมบต8ต8ทท-เ ท-ยงตรงตอการแสดงพฤต8กรรมได,มากขนด,วย และลดการซบซ,อนของโครงสร,างแม แบบลงได,มาก มาก เพราะได,ถ#ถ#กก กกาหนดคD าหนดคDณสมบ ณสมบต8ต8หล หลก ๆ ไว,แล, แล,วในแม วในแมแบบ แบบ ทาให, าให,ล#ลก# แบบมความซ ความซบซ, บซ,อนน, อนน,อยลง อยลง
การส&บทอดคD บทอดคDณสมบ ณสมบต8ต8
การส& - -อสารก อสารกนของว นของวตถD ตถD
ในการสงข, งข,อม#ลระหวางวตถDนนนเราเรยกวาการสงข,อความ (Messaging)ซ (Messaging)ซ -งข,อความ (Message)น นจะถ# นจะถ#กสงผาน แบบแผนพฤต8กรรม (Method)เพ& (Method)เพ&-อตรวจสอบความถ# ตรวจสอบความถ#กต,องของข, องของข,อความท อความท-จะเข, จะเข,าหร&อออกจากว อออกจากวตถD (Object)กอนท อนท-จะ ทาการประมวลข,อความนนเพ&-อแก,ไขข,อม#ลหร&อคDณสมบต8ต8 (Propertie (Properties)ภายในว s)ภายในวตถD ตถD ซ-งการตรวจส ก ารตรวจสอบน อบนเปC เปCนไปตาม ไปตา ม หลกการหอหD ,หD ,มข,อม# อม#ลภายใน เพ& เพ& -อปองกนไม ให,ววตถDททา งานผ8ดไปจากพฤต8กรรมทกก- า หนด โดยขอยกตวอยาง ท -ท -เข,าใกล, กบช บชว8ว8ตประจ ตประจาวน โดยเรามนาย ก.และนาย ข.ซ - ข.ซงเก8 งเก8ดจากแมแบบ มนDษยQ ซ-งนาย ก.ได,ททา การถาม อายDนาย ข.โดย ท -ท -นาย ข.น นจะตอบอายDกลบไปก6ได,หร&อไม ขนอย#กก บคDณสมบต8ต8บางประการของวตถDนนน ๆ เชนเพศ เปCนต,น โดยทนายข. เปXนเพศชาย อาจจะตอบกลบไปในทนท แต-ในกรณททเปXนเพศหญFง อาจจะไมตอบกล ตอบกลบข,อความนกลบไป ซ - -ซงจากต งจากตวอยางด างดงกล งกลาวจะเห6นได,ววา การสงข,อความไป และกลบน บน นจะได, นจะได,ผลตอบรบอย างไรน างไรนน ข ข นอย# อย#กกบคD บคDณสมบต8ต8 ณ. เวลาใดเวลาหน-งของว งของวตถDในเวลานน ๆ และวตถDแต แตละว ละวตถD ตถDนน นจะม น จะมความเปC ความเปCนอ8 สระก สระกนของคD นของคDณสมบต8ต8 เหม& เ หม&อนดงต งตวอย วอยาง ท - -ท นาย ก.และนาย ข.ไม ได, ข.ไม ได,เปC เปCนคนเด นคนเดยวก ยวกนน นน นเอง นเอง โดยยงมคDคDณสมบต8ต8การกระทาหลายร# าหลายร#ปแบบ (Polymorphism)ซ )ซ -งจะไมขอผ#ถ,ถง ในตอนน เพราะอาจทา ให,งงได, ผ#, เขยนจะขอพ# ยนจะขอพ#ดถ ดถงในระด งในระดบท - บทส#สงต ง# ตอไป อไป จากท-เราได,ศศก ษาจากข,อม#ลด,านบนนนเราได,สรDปสวนท- สสา คญในการพฒนาของ ObjectOrientedProgramming ไว,ดดงต งตอไปน อไปน ●
●
●
●
●
แมแบบ แบบ (lass) ล#กแบบ กแบบ (Sublass) วตถD ตถD (Object) การสงข, งข,อความ อความ (Messaging) ข,อความ อความ (Message)
●
●
●
●
●
การหอหD อหD ,มข, มข,อม# อม#ล(Encapsulation) การส&บทอด บทอด (Inheritance) การทาหลายร# าหลายร#ปแบบ ปแบบ (Polymorphism) คDณสมบ ณสมบต8ต8 (Properties) แบบแผนพฤต8กรรม กรรม (MethodBehavior)
“สว*สด สดชาวโลก”ก* ชาวโลก”ก*บPHP บPHP บนโลกแห-งความจรF งความจรFง ในบทความนทางผ#,เขยนจะอ,างอ8งกบ PHPVersion4กอน เพราะมข,ข,อกาหนดท-ไมยDยDงยาก และเหมาะแกการนามาศกษา มากกวา PHPVersion5
โดยในการเขยนแบบโปรแกรมเช8งวตถD ตถDใน PHPน นไมยาก โดยคาท-ใช,เปCนคาหลก (Keyword)ในการเขยนได,แก class, function, this และ parentเปCนต, นต,น จากตวอย วอยางในช างในชวงแรกผ# วงแรกผ# ,เข เขยนจะสร, ยนจะสร,าง าง แมแบบ แบบ (lass)humanข ข นมาก นมากอน อน โดยว8ธธการสร, การสร,างแม างแมแบบใน แบบใน PHPมดดงน งน
php class classname { } ?>
ร#ปแบบค ปแบบคาส าส-งท งท - - 1
1.คาหล าหลกท - กทเราจะใช, เราจะใช,นน นค& น ค&อ class 2.หลงค งคาหล าหลก class ตามด,วยช& - วยช&อแม อแมแบบ แบบ (classname) 3.เปดและป ดและปดด, ดด,วยเคร& - วยเคร&องหมายป องหมายปกกา กกา เพ& - เพ&อก อกาหนดช าหนดชวง วง การเขยนชD ยนชDดค ดคาส าส - -งของแม งของแมแบบ แบบ
เม&-อเราร# , อเราร# ,ร#รปแบบการสร, ป# แบบการสร,างแม างแมแบบแล, แบบแล,ว เราจะมาสร,างแม างแมแบบเพ& - แบบเพ&อใช, อใช,งานจร8 งานจร8งก งกนเลย นเลย php class human { } ?>
ชDดค ดคาส าส - -งท - งท 1 จากชDดค ดคาส าส - -ง (Source Code)ท - )ท 1น 1น เปC เปCนเพ นเพยงการประกาศแม ยงการประกาศแมแบบเทาน าน น ซ - -ซงไม งไมสามารถท สามารถทางานได, างานได, php class human { function Talk(){ echo “Hello World”; } } ?>
ชDดค ดคาส าส - -งท - งท 2 ทาให,เก8ดชD ดชDดค ดคาส-งท- 2ซ-งเราได,เพ8 เพ8-มพฤต8กรรม (Method)ลงไป (Method)ลงไป โดยผมขอยกตวอย วอยางวาให,ววตถDใด ๆ ท-สร,างจาก แมแบบ humanน นสามารถพ8มพQคคาวา HelloWorldออกมาได, HelloWorldออกมาได,โดยใช,ผผานพฤต8กรรมท- ช&ช&-อวา TalkมาเปCนหวข, วข,อ ตวอย วอยาง โดยการเขยนพฤต8กรรมในแมแบบนนก6เขยนร#ปแบบเดยวกบฟxงกQชชนท นท-ว ๆ ไปท ไ ปท-เราคD,นเคยกนใน PHPแบบ เด8ม ๆ น-นเอง โดยใช,คคา หลกค&อ function และตามด,วยช& ยช& -อพฤต8กรรม ซ-งการประกาศ functionในแม onในแม แบบน แบบนก6ก6เหม&อน กบ functionโดยท-วไปนนเอง โดยจากตวอยางชDดคาส-งท- 2น 2น เราจะสร,างวตถDจากแมแบบท- เขยนขนมาทางาน โดย ใช,คคาหล า หลก new โดยร# โดยร#ปแบบการสร, ปแบบการสร,างว างวตถD ตถDข ข นมาน น มาน นม นมดดงน งน $objectname =
new
classname();
ร#ปแบบค ปแบบคาส าส-งท งท - - 2 จากร#ปแบบคาส-งท- 2น 2น จะเห6นร#ปแบบการสร,างวตถDโดยท- $objectnameน น เปCนช& นช&อของ อ- ของช7 ช7 ออางอFงว*ตถ9 หร&อเรยก วาต*วแปรอางอFง ก6ได, โดยทตต- วแปรนจะไปอ,างอ8งกบวตถDทท-เ ราสร,างขนในหนวยความจาอกท โดยหลกการตงช&-อตว แปรอ,างอ8 างอ8งก งกบว บวตถD ตถDนน นจะเหม& นจะเหม&อนก อนกบต บตวแปรท - -วไปทD วไปทDกประการ กประการ Talk(); ?>
ชDดค ดคาส าส - -งท - งท 3 โดยจากชDดคาส-งท ท - 3 เราจะได,ววตถDทท-มมตตวแปรอ,างอ8งท - -ช&ช&-อวา somsakเม& somsakเม&อเรามาด# อ- เรามาด#ตตวอยางความสมพนธQ ระหว ระหวาง าง แมแบบต แบบตวแปรอ, วแปรอ,างอ8 างอ8งว งวตถD ตถD และวตถD ตถD ได,จากภาพด, จากภาพด,านล านลางน างน วาม ามความสมพ มพนธQ นธQกกนอย น อยางไร างไร
ภาพแสดงความสมพ มพนธQ นธQท - -ท 1 จากภาพแสดงความสมพนธQทท- 1น 1น จะเห6นวามววตถDอย# 1วตถDอย#ในหนวยความจ าโดยม าโดยมตตวแปรอ,างอ8งกบวตถDนนช&ช&-อ วา somsakอกท โดยทว-วตถDนน เก8ดจากแมแบบ humanน นเอง ซ-งจากชDดคาส-งส-งดงกลาวนนก6มมการให,พ8พ8มพQคคาวา HelloWorld ออกมา ดง ผลดงผลการท งผลการทางานของชD างานของชDดค ดคาส าส - -งท งท- 3 Hello World
ผลการทางานของชD างานของชDดค ดคาส าส - -งท งท - 3 โดยเราจะสงเกตเห6 งเกตเห6นเคร&-องหมายอางอFง -> ((Reference/rrow Operator )ซ )ซ -งเปCนการช ไปยงคD งคDณสมบต8ต8ภายใน หร&อเรยกใช,พฤต8กรรมใด ๆ ในวตถD นนน ๆ โดยด#ได,จากชD ดค ดคาส-งท- 3ท - -ตตวแปรอ, วแปรอ,างอ8งวตถD somsakเ somsakเพ&พ&-อเรย กใช, พฤต8กรรม Talkข ข นมานนเองซ น- เองซ-งจากชDดคาส-งท- 3น 3น เราจะมาวาดภาพเปCนแมแบบ และวตถDกกน เพ&-อให,เราจะได,เช&-อม โยงความค8ดระหว ดระหวางชD างชDดค ดคาส าส - -งและแนวค8 งและแนวค8ดการเข ดการเขยนโปรแกรมเช8 ยนโปรแกรมเช8งว งวตถD ตถD
ภาพแสดงความสมพ มพนธQ นธQท - -ท 2 โดยจากภาพแสดงความสมพนธQทท- 2น 2น เปรยบเทยบกบชDดคาส-งท- 3น นเราจะเห6นวาตวแปรอ,างอ8งวตถD somsak น นไปอ,างอ8งกบวตถDทท-เก8ดจากแมแบบ humanซ humanซ -งและเม&-อเก8ดขนมาแล,วนน ตวแปรอ,างอ8งวตถDก6 ถDก6ททาการส-งเรยกใช, พฤต8กรรม Talkโดยภาพนจะเห6 จะเห6นวาวตถDทท-ตตวแปรอ, วแปรอ,างอ8ง somsakไปอ,างอ8 างอ8งอย# อย# และได,สสง- ให,พฤต8 พฤต8กรรม Talkทางาน ข ข นโดยพ8 นโดยพ8มพQ มพQคคาว าวา HelloWorldออกมา
มาเรF มาเรFมเข มเขยนต* ยนต*วละครฉบ* วละครฉบ*บPHP บPHP ก*นด นดกวกว-าา จากชDดคาส-งท - 13และภาพแสดงความสมพนธQททงสองร# งสองร#ปท ปท-ได,แสดงไปแล,วน วนน จะเห6นได,ววาเม&อเราเข อ- เราเขยนโปรแกรม แบบเช8งวตถDก6ก6เหม&อนกบเราเขยนบทละครให,แตละวตถD ททาส8-งใด ๆ ก6ต ามท-เราต,องการ องการ โดยกาหนดตวแปรอ, วแปรอ,างอ8 งอ8ง หร&อความหมายหน อความหมายหน- งก6 งก6ค&คอ& การสร,างช& - -อน อนกแสดงอ กแสดงอกท กทหน หน-งเพ& งเพ& -องายต ายตอการจดการคD ดการคDณสมบ ณสมบต8ตและแสดงพฤต8 8และแสดงพฤต8กรรมให,ตรงก ตรงกบ วตถDนนน ๆ โดยตวอยางท-ได,กลาวไปนนอาจจะยงไมเห6นภาพมากนก เรามาด#ตตอวาเม&-อแมแบบนนมการกาหนด คDณสมบต8ตเ8 พ8 - -พ8มเข, มเข,ามาจะทาให,ผลของพฤต8กรรมเปลยนไปและแตกต ย- นไปและแตกตางกน ซ-งเราจะมาด#ววาท าทาให,เก8ดความแตกต ดความแตกตางกน ได,อยางไร โดยเรากาหนดคDณสมบต8ต8และพฤต8 ละพ ฤต8กรรมดงต งตอไปน ไปน ช&-อแมแบบค&อ humanโดยท-แมแบบ humanม ค9ณสมบ*ตFตF (Properties)ค&อช7อ, ความสAง, น? าหน*ก, อาย9และเพศ และมพฤตF พฤตFกรรม(Method) ค&อ บอกช7อ, บอกความสAง,ง, บอกน? าหน* าหน*กและบอกเพศ กและบอกเพศ ได,
เม&-อได, อได,ร#รปแบบท - ป# แบบทต,ตองการแล, อ, งการแล,วเราก6 วเราก6จะมาเข จะมาเขยนชD ยนชDดค ดคาส าส - -งก งกนเลย นเลย php class human { var $name = “human”;// default name = “human” // default = 1 and 1 = male, 2 = female var $sex = 1; var $height = 0; // height > 0 var $weight = 0; // weight > 0 = 0; // age > 0 var $age 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น 4น เราได,พบคาหลกอกคาค&อ var โดยค โดยคานเปCนคาหลกท-ใช,กกาหนดคDณสมบต8ตเ8 ร8-มต,นของแมแบบ ซ - -ซงเปC งเปCน ดงข, งข,อก อกาหนดวาเม& - าเม&อสร, อสร,างวตถD ตถDข ข นแล, น แล,วคDณสมบ ณสมบต8ต8ดดงกลาวจะต8 าวจะต8ดตวไปกบวตถD ตถDนนน ๆ ด,วย ซ-งคD งคDณสมบต8ต8นนนจะแยก นจะแยก อ8สระออกจากว สระออกจากวตถD ตถDอ& - -อน& ๆ โดยร#ปแบบการเข ปแบบการเขยนคD ยนคDณสมบ ณสมบต8ต8ก6กค&ค6 &อ var
$propertyname;
ร#ปแบบค ปแบบคาส าส-งท งท - - 3 โดยท-หลงคาหลก var จะตามด, จะตามด,วยช&-อคDณสมบต8ต8 $propertyname ซ -งการตงช&-อคDณสมบต8ต8นนนก6ใช,หลกการตงช&-อ แบบเดยวก ยวกบต บตวแปรโดยท วแปรโดยท - -วไป วไป โดยการเรยกใช,คDคDณสมบต8ต8 และพฤต8กรรมภายในแม รร มภายในแม แบบเด แบบเดยวกนน นนนจะใช,ผผานคาหลกทช&ช- &-อ this ซ -ซ -งเราจะทาการ อ,างอ8 างอ8งก งกบช& - บช&อคD อคDณสมบ ณสมบต8ตหร& ห8 ร&อพฤต8 อพฤต8กรรมอ กรรมอกท กทหน - หนงโดยใช, งโดยใช,เคร& - เคร&องหมายอ, องหมายอ,างอ8 างอ8ง -> เข, เข,ามาร ามารวมการท วมการทางานโดยว8 างานโดยว8ธธการเข ก ารเขยนค& ยนค&อ $this->propertyname; $this->methodname(< parameter*> ); );
ร#ปแบบค ปแบบคาส าส-งท งท - - 4 การเช7อมโยงค9 อมโยงค9ณสมบ*ตFตF และพฤตFกรรมของตนเอง ” ซ -ซ -งในร#ปแบบคาส โดยท- $thisมความหมายว ความหมายวา การเช7 าสง- ท -ท - 4น 4น ก6ก6 ได,มมตตวอยางการอ,างอ8งถงพฤต8กรรม ซ-งพฤต8กรรมนเราสามารถเรยกใช,ได,เหม&อน ๆ กบฟxงกQชชนท-วๆ ไปและรวมไป ถงการส งการสงพารQ งพารQราม8 ราม8เตอรQ เตอรQตตาง า ง ๆ เข,าไปได, าไปได,ด,ดวย ,วย จากตวชDดค ดคาส -งท -ท - 4เรานามาสร,างว างวตถD ตถDเพ& เพ&-อพ8 อพ8สDสทD ธ8 zธ8 zววาว าวตถD ตถDนน น ๆ มความเปCนอ8 นอ8สระตอก อกน โดยเราจะสร,างวตถD 2วตถD ตถD ท - -ทมมช&ช-&ออ,างอ8งวา somsakและ somyingโดยท ngโดยทกก- าหนดให,ช&ช&-อ SomsakเปC SomsakเปCนผ#,ชาย มอายD 2ปความส#ง 17 ชม.นา
หนก 5กก.และ 5 กก.และ somyingเปCนผ#หญ8 ห, ญ8ง มอายD 25ปความส#ง 1 ชม.นาหน าหนก 4กก.เม&-อก อกาหนดเสร6จแล,ว เราจะ เราจ ะ บอกให,ววตถD ต ถDทท งสองบอกข, ง สองบอกข,อม# อม#ลของต ลของตวเองผ วเองผานพฤต8 านพฤต8กรรมท - - ได, กรรมท ได,กกาหนดไว, าหนดไว, ในชDดค ดคาส าส - -งท งท- 4ท - - ได, 4ท ได,เข เขยนไว, ยนไว,กกอนหน, อนหน,าน าน ได,ดดงน งน $somsak = new human (); (); $somsak->name = 'Somsak'; $somsak->sex = 1; $somsak->height = 178; $somsak->weight = 65; $somsak->age = 28; echo 'Name : '.$somsak->showName(). '.$somsak->showName().'
'; echo 'Sex : '.$somsak->showSex().'
'; echo 'Height : '.$somsak->showHeight().'
'; echo 'Weight : '.$somsak->showWeight().'
'; echo 'Age : '.$somsak->showAge().'
'; $somying = new human (); (); $somying->name = 'Somying'; $somying->sex = 2; $somying->height = 168; $somying->weight = 48; $somying->age = 25; '.$somying->showName().'
'; echo 'Name : '.$somying->showName() echo 'Sex : '.$somying->showSex().'
'; echo 'Height : '.$somying->showHeight().'
'; echo 'Weight : '.$somying->showWeight().'
'; echo 'Age : '.$somying->showAge().'
';
ชDดค ดคาส าส - -งท - งท 5 จากตวอย วอยางชD างชDดค ดคาส าส - -งด งดงกล งกลาวน าวนเราจะได, เราจะได,คคาตอบของผลการท าตอบของผลการทางานด างานดงต งตอไปน อไปน Name : Somsak Sex : male Height : 178 Weight : 65 Age : 28 Name : Somying Sex : female Height : 168 Weight : No Answer Age : No Answer
ผลการทางานของชD างานของชDดค ดคาส าส - -งท งท - 5 จากชDดคาส-งท- 5 และผลการท และผล การทางานนบอกเราวาวตถD ตถDทท-สร,างจากแมแบบ humanน นเม&-อถ#กกาหนดคDณสมบต8ต8ววา เปCนเพศชายแล, นเพศชายแล ,วถ,าเราส าเราส-งให,แสดงอายDและนาหนกก6 กก6จะแสดงออกมา ะแสด งออกมา แตถ,ถ,าถ# าถ#กก กกาหนดคDณสมบต8ตเ8 ปCนเพศหญ8 นเพศหญ8งแล,วกลบ ไมแสดงอายDและนาหนกออกมาให,เรา ซ-งเก8ดจากการท-เราได,กกาหนดในพฤต8กรรมนในแมแบบไว,แล,ววา โดยอย#ใน พฤต8กรรมท - กรรมทช& - -ชอ& showAgeและ showWeightวาถ, าถ,าเปC าเปCนเพศหญ8งจะ งจะ NoAnswerออกมา ด,วยเหตD วยเหตDผลบางประการ ผลบางประการ ;P จากตวอยางน างน ยยงมจDจDดอ ดออนเร& อนเร&-องของการตงคาคD าคDณสมบ ณสมบต8ตห8 ลายอยาง เชนการกาหนดเพศนนจะต,องเปC องเปCน 1ท - 1ทเปC เปCนเพศ นเพศ ชายและ 2ท - -เปC เปCนเพศหญ8 งซ งซ -งถ,าเราต าเราตงค งคาคDณสมบต8ตโ8 ดยตรงแบบชDดคาส-งท- 5น นจะท นจะทาให,ข,ข,อม#ลคDณสมบต8ต8ผ8ผด8 เพยนไป จากท-ควรจะเปCนเราจงจาเปCนต,องปรบเปล-ยนการตงคาคDณสมบต8ต8ใหมโดยท ดยทางานผานพฤต8 นพฤต8กรรมแทนซ-งชวยในการ กรองข,อม#ลให,เรากอนทาการตงคาให,กกบคDณสมบต8ต8จร8ง ๆ ซ-งเปCนคDณสมบต8ต8ทท-อย#ในข,อกาหนดการหอหD,มภายใน (Encapsulation)น นเอง นเอง โดยตามข,อกาหนดท-ร#ร#,โดยท ดยท-วกนในวงการการเข นในวงการ การเขยนโปรแกรม นโ ปรแกรมเช8 เช8งวตถD ตถDววาการตงคาให,กกบ
งค-า และการเรยกใช,คคาคDณสมบ คDณสมบ ณสมบต8ต8นนนต,องใช, องใช,คคาขนต, น ต,นวา set ท - ทแปลว แปลวา ต* ?งคณสมบต8ต8นน นใช,คคา ขนต,นว นวา get ท - ทแปลว แปลวา เขาถ าถง แล,วตามด,วยช& วยช&-อคDณสมบต8ต8นนน ๆ เพ&-อง องายตอการเรยกใช,และส& และส&-อความหมายมากขน ทางผ# ,เขยนจงขอนาชDดคา ส - -งท - งท 5มาปรบปรD บปรDงให, งให,ดดข ข นไปอ น ไปอก php class human { var $name = “human”;// default name = “human” var $Sex= 1; // default = 1 and 1 = male, 2 = female $heigh ght t = 0; // heig height ht > 0 var $hei $weigh ght t = 0; // weig weight ht > 0 var $wei = 0; // age > 0 var $age 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ดค ดคาส าส - -งท - งท จากชDดคาส-งท- จะเห6 จะเห6นได,ววา ผ#,เขยนนนได, ได,ปรบปรD บปรDงจากการใช, จาก การใช,คคาวา show เปC เปCนคาวา get แทน แท น และไดเพFม พฤตFกรรมใหม-ททมม set เปXนคาข?นตนและตามดวยช7อต*วแปรโดยสรางข?นมาเพ7อใหใชพฤตFกรรมน?ในการ เปลยนแปลงค-าแทนการต*?งค-าใหก*ก*บค9ณสมบ*ตFตFโดยตรง แบบชDดคาส-งท- 5โดยในพฤต8ก รรม setNamesetSe setNamesetSe setHeightsetWeightและ setAgeโดยจะมคคาเร8 าเร8 -มต,นของการทางานไว, างานไว,ทท-พาราม8เตอรQ เตอรQเปC เปCน 1 ไว,กกอ นแล,วเพ&-อปองก องกนผ# , นผ# , เขยนโปรแกรมนนล&มใสคคา ลงไป ซ-งใน setNameน นได,กกาหนดพาราม8เตอรQตตงต,นไว,เชนกน แตเปCนการกาหนดช&-อ humanแทน humanแทน ซ-งใน setSeน setSeน นได,มมการดกจบคาวาต,องมคคา เพยง 1และ 2เทานน สวน setHei setHeightset ghtsetWei Weight ght และ setAgeก6ได,ดดกจบค บคาวา คาท-ใสเข, เข,ามานนต,องมคคา มากกวา 0 เสมอ ซ-งจากท-เราได,ททาแบบนททาให,การต การตงค งคาและ เข,าถ าถงคD งคDณสมบ ณสมบต8ต8ตตาง า ง ๆ มความถ# ความถ#กต, กต,องของข, องของข,อม# อม#ลมากข ลมากข นกว นกวาเด8 าเด8ม เม&-อเราน อเรานาไปใช, าไปใช,งานก6 งานก6จะม จะมร#รปแบบด ป# แบบดงชD งชDดค ดคาส าส - -งท - งท 7น 7น
$somsak = new human (); (); $somsak->setName('Somsak'); $somsak->setSex(); <---- ไมได ไดใส ใสค คาลงไป าลงไป $somsak->setHeight(178); $somsak->setWeight(65); $somsak->setAge(28); echo 'Name : '.$somsak->getName().'
'; echo 'Sex : '.$somsak->getSex().'
'; echo 'Height : '.$somsak->getHeight().'
'; echo 'Weight : '.$somsak->getWeight().'
'; echo 'Age : '.$somsak->getAge().'
'; $somying = new human (); (); $somying->setName('Somying'); $somying->setSex(2); $somying->setHeight(168); $somying->setWeight(48); $somying->setAge(25); '.$somying->getName().'
'; echo 'Name : '.$somying->getName(). echo 'Sex : '.$somying->getSex().'
'; echo 'Height : '.$somying->getHeight().'
'; echo 'Weight : '.$somying->getWeight().'
'; echo 'Age : '.$somying->getAge().'
';
ช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 างานของชDดค ดคาส าส - -งท งท - 7 จากชDดค ดคาสง- ท -ท - 7และผลการทางานของชDดค ดคาส-งท- 7น 7 น จะเห6 จะเห6นได, นได,ววา ในชDดคาส-งท- 7น นท - นท $somsak->setSex() น นไมได,ใสคคาอะไรลงไปแตผลการทางานนนก6ออกมาเปCน maleเชนเด8ม ซ -ซ -งเปCนช&-อตงต,นของพาราม8เตอรQของ พฤต8กรรมด กรรมดงกล งกลาว ซ-งชวยให, ยให,ข,ข,อม#ลตาง ๆ น นยงคงมความถ#กต,องหร&อ ในบางกรณชชว ยให,โปรแกรมนนไมททางานผ8ด พลาดไปจากท - พลาดไปจากทควรจะเปC ควรจะเปCนในข นในข นตอน นตอน จากบทความในตอนท- 1 น น เปC เปCนเพ นเพยงการปร ยงการปรบพ& พ& นความเข, นความเข,าใจหล าใจหลกการทางานของการเขยนโปรแกรมเช8 ยนโปรแกรมเช8งวตถDเทานน ยงไม ได, ไม ได,ลงลกถ กถงการใช,งานท-วไปมากมายนก เพราะถ,าเรายงไมเข,าใจหลกการพ&นฐานแล,วก6ยากท-จะนาไปใช,งานใน ระดบส# บส#งตอไปได, อไปได,ดด โดยในตอนท-1 น น ทางผ# , างผ# ,เขยนพยายามใช, ยนพยายามใช,ศศพทQเทคน8คให,น,น,อยท - -สDสDด แตบางคร บางครงคาไทยท-ใช,อาจทาให, งDนงง ซ-งทางผ#,เขยนก6ได,ททา กากบไว,ด,ด,านหลงคาไทยนน ๆ ไว,เพ&-อให,เข,าใจงายขนสาหรบทานท-ใช,คคาเทคน8คเหลาน เปCนประจ นประจาครบ สาหรบตอนต บตอนตอไปน อไปนนผมจะแนะน นผมจะแนะนาการนาเอาแมแบบและวตถD ท-สร,างนาไปใช,งาน โดยท โดยท -เราจะยงไมส&สบ& ทอดแมแบบ แต ใช, แต ใช,งานท งานท - -วไปก วไปกอนเปC อนเปCนอ นอนด นดบแรก บแรก
เอกสารอางอF างอFง ●
●
●
●
PHP Manual, http://www.php.netJanuary2007 Zend PHP Certification Study GuideZendTechnologiesAugust2004 Concepts of Programming Languages (th Edition), RobertW.SebestaApril2005 The Object Modelhttp://developer.apple.com/ecember200