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)

การหอหD,มข,อม#ล(Encapsulation)

ล#กแบบ (Sub-Class)

การส&บทอด (Inheritance)

วตถD (Object)

การทาหลายร#ปแบบ (Polymorphism)

การสงข,อความ (Messaging)

คDณสมบต8 (Properties)

ข,อความ (Message)

แบบแผนพฤต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 มดงน

<?php
class classname {
}
?>

1. คาหลกท-เราจะใช,นนค&อ class
2. หลงคาหลก class ตามด,วยช&-อแมแบบ (classname)
3. เปrดและปrดด,วยเคร&-องหมายปsกกา เพ&-อกาหนดชวง
การเขยนชDดคาส-งของแมแบบ

ร#ปแบบคาส-งท- 1

เม&-อเราร#,รป# แบบการสร,างแมแบบแล,ว เราจะมาสร,างแมแบบเพ&-อใช,งานจร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

Sign up to vote on this title
UsefulNot useful