Upload
-
View
194
Download
0
Embed Size (px)
Citation preview
1
Object-Oriented PHPObject-Oriented PHP
กนกวรรธน์ เซ ี่ยงเจ ็น กนกวรรธน์ เซ ี่ยงเจ ็นส ำำนกัว ิชำเทคโนโลยีส ำำนกัว ิชำเทคโนโลยี
สำรสนเทศและกำรส ือ่สำรสำรสนเทศและกำรส ือ่สำร มหำว ิทยำลยันเรศวร พะเยำ มหำว ิทยำลยันเรศวร พะเยำ
2
เน ื้อหำเน ื้อหำ หลกักำรของ หลกักำรของ Object-OrientedObject-Oriented
กำรสร ้ำง กำรสร ้ำง Class, AttributeClass, Attribute และ และOperationOperation ใน ใน PHPPHP
กำรเร ียกใช ้กำรเร ียกใช้ ClassClass AttributeAttribute
กำรเร ียกใช ้กำรเร ียกใช้ ClassClass OperationOperation
กำรถ่ำยทอดคณุสมบัต ิกำรถ่ำยทอดคณุสมบัต ิ InheritanceInheritance
กำรออกแบบ กำรออกแบบ ClassClass
3
หลักกำรของ หลักกำรของ Object-Object-OrientedOrientedภำษำในกำรเข ียนโปรแกรมสมัยภำษำในกำรเข ียนโปรแกรมสมัยจะอยู่ในร ูปแบบของว ิธ ีกำรเช ิงจะอยู่ในร ูปแบบของว ิธ ีกำรเช ิง
ว ัตถ ุว ัตถ ุ Object-OrientedObject-Oriented กำรพัฒนำเช ิงกำรพัฒนำเช ิง ว ัตถ ุ เป ็นกำรสร ้ำงควำมสัมพันธ ์ ว ัตถ ุ เป ็นกำรสร ้ำงควำมสัมพันธ ์
แยกกำรกระทำำ และสร ้ำง แยกกำรกระทำำ และสร ้ำง คุณสมบัต ิเฉพำะของว ัตถ ุ เพ ื่อ คุณสมบัต ิเฉพำะของว ัตถ ุ เพ ื่อ
ช ่วยให้สะดวกในกำรพฒันำรวมช่วยให้สะดวกในกำรพฒันำรวม กัน รวมไปถึงกำรนำำกลบัมำใช้ กัน รวมไปถึงกำรนำำกลบัมำใช้
ใหม่ ประกอบด้วย ใหม่ ประกอบด้วย Class and ObjectClass and Object
PolymorphismPolymorphism InheritanceInheritance
4
Class and ObjectClass and Object
ClassClass คือแม่แบบของ คือแม่แบบของ ObjectObject ที่ท ี่ ประกอบด้วย ประกอบด้วย
คณุสมบตั ิคณุสมบตั ิ (Attribute)(Attribute):: เช ่นต ัวแปรเช ่นต ัวแปร ต่ำงๆ ที่ประกำศขึ้นใชง้ำน ต่ำงๆ ที่ประกำศขึ้นใชง้ำน
ว ิธ ีกำรด ำำเน ินกำรว ิธ ีกำรด ำำเน ินกำร (Operation)(Operation):: เช ่น เช ่น ฟงัก ์ช ันกำรทำำงำนต่ำงๆ ที่กระท ำำ ฟงัก ์ช ันกำรทำำงำนต่ำงๆ ที่กระท ำำ
กับ ค ุณสมบตั ิท ี่น ิสติก ำำหนดขึน้มำ กับ ค ุณสมบตั ิท ี่น ิสติก ำำหนดขึน้มำ
5
InheritanceInheritance
InheritanceInheritance คือ ค ุณสมบตั ิในกำร คือ ค ุณสมบตั ิในกำร ถ่ำยทอดลักษณะ และ ถ่ำยทอดลักษณะ และ MemberMember จำก จำก
ClassClass หนึ่งท ี่อย ู่เหน ือกว ่ำ หนึ่งท ี่อย ู่เหน ือกว ่ำ (Super class)(Super class) ไปไป ยงัอ ีก ยงัอ ีก ClassClass หนึ่งท ี่อย ูร่ะด ับล ่ำงหนึ่งท ี่อย ูร่ะด ับล ่ำง (Sub (Sub
class)class) โดย โดย ClassClass ที่ร ับกำรถ ่ำยทอด จะม ี ที่ร ับกำรถ ่ำยทอด จะม ี ลักษณะเช่นเด ียวก ัน ลักษณะเช่นเด ียวก ัน ClassClass ต้นแบบทุกต ้นแบบทุก
ประกำรประกำร โดยที่เรำสำมำรถปร ับปร ุง โดยที่เรำสำมำรถปร ับปร ุง
เปล ี่ยนแปลงล ักษณะและ เปล ี่ยนแปลงล ักษณะและ MemberMember จำก จำกClassClass ต้นแบบ ให้ม ีควำมสำมำรถใหม่ๆ ต้นแบบ ให้ม ีควำมสำมำรถใหม่ๆ
ขึน้มำ ช่วยให้ประหยดัเวลำในกำร ขึน้มำ ช่วยให้ประหยดัเวลำในกำรพฒันำพฒันำ
6
ClassClass ต้นแบบต้นแบบ เร ียกว ่ำ เร ียกว ่ำ ""Base ClassBase Class"" หรือ หรือ ""ParentParent ClassClass""
ClassClass ที่ร ับกำรถ ่ำยทอดที่ร ับกำรถ ่ำยทอด เร ียกว ่ำ เร ียกว ่ำ ""DerivedDerived ClassClass""
หรือ หรือ ""ChildChild ClassClass""
Parent ClassParent Class
Child ClassChild Class Child ClassChild ClassChild ClassChild Class
7
ClassClass ตน้แบบตน้แบบ คือ คือ PersonPerson
ClassClass ทีร่ ับการถ ่ายทอดทีร่ ับการถ ่ายทอด คือ คือ StudentStudent, ,
NurseNurse, , DoctorDoctor ซึ่งจะม ีค ุณลกัษณะซึ่งจะม ีค ุณลกัษณะ เหม ือน เหม ือน PersonPerson
PersonPerson
NurseNurse DoctorDoctorStudentStudent
8
InheritanceInheritance
ข้อด ีข ้อด ี สามารถนำา สามารถนำา codecode กลับมาใช้ใหม่ได ้กลับมาใช้ใหม่ได ้โดยไม่ต ้องเข ียนใหม่โดยไม่ต ้องเข ียนใหม่
สามารถแก้ไขที ่สามารถแก้ไขที่ supersuper classclass ทีเ่ด ียว ทีเ่ด ียว โดยไม่ต ้องแก้ไขทุกๆ โดยไม่ต ้องแก้ไขทุกๆ subsub classclass ที่ได ้ท ี่ได ้
ร ับการ ร ับการ extendextend มามา ลดความซับซอ้นของโปรแกรมลดความซับซอ้นของโปรแกรม
ข้อเส ียข ้อเส ีย ถ้าออกแบบไม่ด ี ม ีผลกระทบที่รา้ย ถ้าออกแบบไม่ด ี ม ีผลกระทบที่รา้ยแรงในภายหลังแรงในภายหลัง
9
การสรา้ง การสรา้ง Class, AttributeClass, Attribute และ และOperationOperation ใน ใน PHPPHP
class classname { var $attribute_name;
function func_name(){
} // end function } // end class
class classname { var $attribute_name;
function func_name(){
} // end function } // end class
การประกาศเพื่อสร ้าง classการประกาศเพื่อสร ้าง class
สร ้าง attribute ต้องม ี varสร ้าง attribute ต้องม ี var
สร ้าง operation
สร ้าง operation
10
ตัวอย ่างต ัวอย ่าง
class student { var $student_id;
function show_student_id(){
} // end function } // end class
class student { var $student_id;
function show_student_id(){
} // end function } // end class
การประกาศเพื่อสร ้าง classการประกาศเพื่อสร ้าง class
สร ้าง attribute ต้องม ี varสร ้าง attribute ต้องม ี var
สร ้าง operation
สร ้าง operation
11
ConstructorConstructor
เปน็ฟ ังก ์ช ันท ี่จะถ ูกเร ียกใช้งานโดยเปน็ฟังก ์ช ันท ี่จะถ ูกเร ียกใช้งานโดยอัตโนมตั ิอ ัตโนมตั ิ เม ื่อม ีการ เม ื่อม ีการสร ้างสร ้าง ObjectObject ใหม ่ใหม่
โดยที ่โดยที่ ConstructorConstructor มีร ูปแบบคอืม ีร ูปแบบคอื
หรือหร ือ อาจกำาหนดชื่อของฟังก ์ช ัน ให้ อาจกำาหนดชื่อของฟังก ์ช ัน ให้ตรงก ับชื่อตรงก ับชื่อ ClassClass ก็ได ้ก ็ได ้ เราน ิยมใช้ เราน ิยมใช้
สำาหร ับก ำาหนดค่าเร ิ่มต ้นให้ก ับ สำาหร ับก ำาหนดค่าเร ิ่มต ้นให้ก ับ attributeattribute หรือ หรือ methodmethod
function __construct(){
}
function __construct(){
}
ร ูปแบบ
12
Example: __construct()Example: __construct()
class student { var $student_id;
function __construct($param){ echo "Constructor with parameter $param"; } // end function } // end class
class student { var $student_id;
function __construct($param){ echo "Constructor with parameter $param"; } // end function } // end class
การประกาศเพื่อสร ้าง classการประกาศเพื่อสร ้าง class
สร ้าง attributeสร ้าง attribute
สร ้าง constructor
สร ้าง constructor
13
DestructorDestructor
เปน็ฟงัก ์ช ันท ี่จะถ ูกเร ียกใชง้านโดยเปน็ฟงัก ์ช ันท ี่จะถ ูกเร ียกใชง้านโดยอัตโนมัต ิอ ัตโนมัต ิ ก่อนการทำาลาย ก่อนการทำาลาย ClassClass ที่ใช ้ท ี่ใช ้
งานอยู่ โดยที่ งานอยู่ โดยที่ DestructorDestructor มรี ูปแบบคอืมรี ูปแบบคอื
จะถูกเร ียกใช้เม ื่อม ีการ จะถูกเร ียกใช้เม ื่อม ีการ unsetunset ตัวแปร ตัวแปรClassClass ที่เราสร ้างข ึ้นท ี่เราสร ้างข ึ้น
function __destruct(){
}
function __destruct(){
}
ร ูปแบบ
14
Example: __destruct()Example: __destruct()
class student { var $student_id;
function __destruct($param){ echo "You are Destroy Class"; } // end function } // end class
class student { var $student_id;
function __destruct($param){ echo "You are Destroy Class"; } // end function } // end class
การประกาศเพื่อสร ้าง classการประกาศเพื่อสร ้าง class
สร ้าง attributeสร ้าง attribute
สร ้าง destructor
สร ้าง destructor
15
Example: construct & destructExample: construct & destruct
classclass studentstudent{{
functionfunction __construct__construct(($param$param){){echoecho "Construct Class for "Construct Class for $param$param <br/>"; <br/>";
} } // end constructor// end constructor
functionfunction __destruct__destruct(){(){ echoecho "Destroy Class!!"; "Destroy Class!!";} } // end destructor// end destructor
} } // end class// end class
$stu$stu = = newnew studentstudent('uthai');('uthai'); // create instance// create instanceunsetunset(($stu$stu);); // destroy class// destroy class
Construct Class for uthai Destroy Class!!
Construct Class for uthai Destroy Class!!
16
การเรยีกใช ้การเรยีกใช้ ClassClass AttributeAttribute
ในการใช้งานในการใช้งาน ClassClass เม ื่อเราเม ื่อเราตอ้งการที่จะอ ้างอ ิงตอ้งการที่จะอ ้างอ ิง AttributeAttribute ที่อย ู่ท ี่อย ู่ภายในภายใน ClassClass สามารถทำาได ้ โดย สามารถทำาได ้ โดยใช้ใช ้ PointerPointer พเิศษที่ช ือ่ว ่าพเิศษที่ช ือ่ว ่า $this$this ชีไ้ปท ี่ช ีไ้ปท ี่
ช ือ่ของชือ่ของ AttributeAttribute ที่เราต ้องการที่เราต ้องการvar $attribute_name;. . .$this -> attribute_name;
var $attribute_name;. . .$this -> attribute_name;
ร ูปแบบ
17
การเรยีกใช ้การเรยีกใช้ ClassClass OperationOperation
การเร ียกใช้งาน การเร ียกใช้งาน Class OperationClass Operation จะจะ ทำาได ้ก ็ต ่อม ีการเร ียกใช้งานผ่าน ทำาได ้ก ็ต ่อม ีการเร ียกใช้งานผ่าน
instanceinstance ที่เราสร ้างข ึ้นมาจาก ที่เราสร ้างข ึ้นมาจาก ClassClass
18
Example: Class Attribute & Example: Class Attribute & OperationOperationclassclass studentstudent{{ varvar $student_id$student_id;;
functionfunction __construct__construct(($param$param){){$this -> $this -> student_id student_id = = $param$param;;
} } // end constructor// end constructor
functionfunction show_idshow_id(){(){echoecho "student id = " . "student id = " . $this$this ->-> student_idstudent_id;;
} } // end function// end function
} } // end class// end class
$stu$stu = = newnew studentstudent((4633000146330001);); // create instance// create instance$stu$stu ->-> show_idshow_id();(); // show student id// show student id
student id = 46330001 student id = 46330001
Class AttributeClass Attribute
Class OperationClass Operation
19
การถ่ายทอดคุณสมบัต ิการถ่ายทอดคุณสมบัต ิInheritanceInheritance เปน็การถ ่ายทอด เปน็การถ ่ายทอด AttributeAttribute และ และ OperationOperation
จาก จาก ClassClass แม่แบบ โดยเราต ้องใช้ค ำา แม่แบบ โดยเราต ้องใช้ค ำา สัง่ สัง่ extendsextends ตามหลังช ื่อ ตามหลังช ื่อ ClassClass แล้วปดิแล ้วปดิ
ท้ายดว้ยชื่อ ท้ายดว้ยชื่อ ClassClass ต้นแบบต้นแบบ
สร ้าง สร ้าง Class Class studentstudent โดยถ่ายทอด โดยถ่ายทอด AttributeAttribute และ และ OperationOperation จาก จาก ClassClass personperson
class student extends person {
}
class student extends person {
}
ร ูปแบบ
20
Example: InheritanceExample: Inheritance
classclass personperson{{varvar $ $firstnamefirstname;;varvar $ $lastnamelastname;;
functionfunction __construct__construct(($$fnamefname, $, $lnamelname)){{$$thisthis --> > firstnamefirstname = = $$fnamefname;; // // assign value to firstnameassign value to firstname$$thisthis --> > lastnamelastname = = $$lnamelname;; // // assign value to lastnameassign value to lastname
} } // // end functionend function
functionfunction show_detailshow_detail()(){{echoecho ""Hello, Hello, " " ;;echoecho $ $thisthis --> > firstnamefirstname . " " . . " " . $$thisthis --> > lastnamelastname;;
} } // // end functionend function} } // // end classend class
$$detaildetail = = newnew personperson("("UthaiUthai", "", "ShiangJanShiangJan");");$$detaildetail ->-> show_detailshow_detail();();
Hello, Uthai ShiangJanHello, Uthai ShiangJan
21
Example: InheritanceExample: Inheritanceclassclass personperson{{
varvar $ $firstnamefirstname;;varvar $ $lastnamelastname;;
functionfunction __construct__construct(($$fnamefname, $, $lnamelname)){{$$thisthis --> > firstnamefirstname = = $$fnamefname;; // // assign value to firstnameassign value to firstname$$thisthis --> > lastnamelastname = = $$lnamelname;; // // assign value to lastnameassign value to lastname
} } // // end functionend function
functionfunction show_detailshow_detail()(){{echoecho ""Hello, Hello, " " ;;echoecho $ $thisthis --> > firstnamefirstname . " " . . " " . $$thisthis --> > lastnamelastname;;
} } // // end functionend function} } // // end classend class
classclass studentstudent extendsextends personperson{{ // // inheritanceinheritance
}} // // end classend class
$$detaildetail = = newnew studentstudent("("UthaiUthai", "", "ShiangJanShiangJan");");$$detaildetail ->-> show_detailshow_detail();();
Hello, Uthai ShiangJanHello, Uthai ShiangJan
Person
Student
22
OverridingOverriding
ในการ ในการ InheritanceInheritance ClassClass มาเพื่อมาเพ ื่อใชง้านบางคร ั้งเราจ ำาเป ็นต ้องม ีใชง้านบางคร ั้งเราจ ำาเป ็นต ้องม ี
การเปล ีย่นแปลง การเปล ีย่นแปลง ((ModifyModify)) functionfunction การทำาให ้ให ้สอดคล้องก ับ การทำาให ้ให ้สอดคล้องก ับ ClassClass
ใหม่ท ีเ่ราสร ้างข ึ้นใหม่ท ีเ่ราสร ้างข ึ้น การทำา การทำา OverridingOverriding คือค ือ การสร ้าง การสร ้าง
FunctionFunction ใน ใน SubSub ClassClass ที่ม ีช ือ่เหม ือน ที่ม ีช ือ่เหม ือนFunctionFunction ของ ของ ClassClass แม่แบบแม่แบบ เพ ือ่ให ้เพ ือ่ให ้ท ำางานที่แตกต่างไปจากทำางานที่แตกต่างไปจาก Function Function
ของของ Class Class แม่แบบแม่แบบ
23
การออกแบบ การออกแบบ ClassClass
โดยทัว่ไปเราจะนำา โดยทัว่ไปเราจะนำา ClassClass แทน แทนObjectObject ที่ม ีอย ู่ในชีว ิตจร ิง เช ่น หาก ที่ม ีอย ู่ในชีว ิตจร ิง เช ่น หาก
เราต ้องการออกแบบ เราต ้องการออกแบบ E-CommerceE-Commerce เราก ็ควรแบ่งส ่วนประกอบของ เราก ็ควรแบ่งส ่วนประกอบของ E-E-
CommerceCommerce เป ็นส ่วนๆ เช ่น เป ็นส ่วนๆ เช ่น ShoppingShopping cartcart ก็แยกออกมาสร ้างเป ็น ก็แยกออกมาสร ้างเป ็น ClassClass
เพ ื่อให ้สามารถนำาเอา เพ ื่อให ้สามารถนำาเอา ShoppingShopping cartcart ไปใชง้านได้ก ับเว ็บ ไปใชง้านได้ก ับเว ็บ E-CommerceE-Commerce
อื่นๆ ได้อ ีก อื่นๆ ได้อ ีก
24
Example: OverridingExample: Overriding
classclass personperson{{
functionfunction show_detailshow_detail()(){{echoecho ""Hello World Hello World " " ;;
} } // // end functionend function} } // // end classend class
classclass studentstudent extendsextends personperson{{
}} // // end classend class
$$detaildetail = = newnew studentstudent();();$$detaildetail ->-> show_detailshow_detail();();
classclass personperson{{
functionfunction show_detailshow_detail()(){{echoecho ""Hello World Hello World " " ;;
} } // // end functionend function} } // // end classend class
classclass studentstudent extendsextends personperson{{functionfunction show_detailshow_detail()(){{
echoecho ““Hi World Hi World " " ;;
} } // // end functionend function
}} // // end classend class
$$detaildetail = = newnew studentstudent();();$$detaildetail ->-> show_detailshow_detail();();
Hello WorldHello World
Hi WorldHi World