24
1 Object-Oriented PHP Object-Oriented PHP กนกวรรธน์ เซี่ยงเจ็น กนกวรรธน์ เซี่ยงเจ็น สำนักวิชำเทคโนโลยี สำนักวิชำเทคโนโลยี สำรสนเทศและกำรสื่อสำร สำรสนเทศและกำรสื่อสำร มหำวิทยำลัยนเรศวร พะเยำ มหำวิทยำลัยนเรศวร พะเยำ

Lec12 oop in_php

  • Upload
    -

  • View
    194

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lec12 oop in_php

1

Object-Oriented PHPObject-Oriented PHP

กนกวรรธน์ เซ ี่ยงเจ ็น กนกวรรธน์ เซ ี่ยงเจ ็นส ำำนกัว ิชำเทคโนโลยีส ำำนกัว ิชำเทคโนโลยี

สำรสนเทศและกำรส ือ่สำรสำรสนเทศและกำรส ือ่สำร มหำว ิทยำลยันเรศวร พะเยำ มหำว ิทยำลยันเรศวร พะเยำ

Page 2: Lec12 oop in_php

2

เน ื้อหำเน ื้อหำ หลกักำรของ หลกักำรของ Object-OrientedObject-Oriented

กำรสร ้ำง กำรสร ้ำง Class, AttributeClass, Attribute และ และOperationOperation ใน ใน PHPPHP

กำรเร ียกใช ้กำรเร ียกใช้ ClassClass AttributeAttribute

กำรเร ียกใช ้กำรเร ียกใช้ ClassClass OperationOperation

กำรถ่ำยทอดคณุสมบัต ิกำรถ่ำยทอดคณุสมบัต ิ InheritanceInheritance

กำรออกแบบ กำรออกแบบ ClassClass

Page 3: Lec12 oop in_php

3

หลักกำรของ หลักกำรของ Object-Object-OrientedOrientedภำษำในกำรเข ียนโปรแกรมสมัยภำษำในกำรเข ียนโปรแกรมสมัยจะอยู่ในร ูปแบบของว ิธ ีกำรเช ิงจะอยู่ในร ูปแบบของว ิธ ีกำรเช ิง

ว ัตถ ุว ัตถ ุ Object-OrientedObject-Oriented กำรพัฒนำเช ิงกำรพัฒนำเช ิง ว ัตถ ุ เป ็นกำรสร ้ำงควำมสัมพันธ ์ ว ัตถ ุ เป ็นกำรสร ้ำงควำมสัมพันธ ์

แยกกำรกระทำำ และสร ้ำง แยกกำรกระทำำ และสร ้ำง คุณสมบัต ิเฉพำะของว ัตถ ุ เพ ื่อ คุณสมบัต ิเฉพำะของว ัตถ ุ เพ ื่อ

ช ่วยให้สะดวกในกำรพฒันำรวมช่วยให้สะดวกในกำรพฒันำรวม กัน รวมไปถึงกำรนำำกลบัมำใช้ กัน รวมไปถึงกำรนำำกลบัมำใช้

ใหม่ ประกอบด้วย ใหม่ ประกอบด้วย Class and ObjectClass and Object

PolymorphismPolymorphism InheritanceInheritance

Page 4: Lec12 oop in_php

4

Class and ObjectClass and Object

ClassClass คือแม่แบบของ คือแม่แบบของ ObjectObject ที่ท ี่ ประกอบด้วย ประกอบด้วย

คณุสมบตั ิคณุสมบตั ิ (Attribute)(Attribute):: เช ่นต ัวแปรเช ่นต ัวแปร ต่ำงๆ ที่ประกำศขึ้นใชง้ำน ต่ำงๆ ที่ประกำศขึ้นใชง้ำน

ว ิธ ีกำรด ำำเน ินกำรว ิธ ีกำรด ำำเน ินกำร (Operation)(Operation):: เช ่น เช ่น ฟงัก ์ช ันกำรทำำงำนต่ำงๆ ที่กระท ำำ ฟงัก ์ช ันกำรทำำงำนต่ำงๆ ที่กระท ำำ

กับ ค ุณสมบตั ิท ี่น ิสติก ำำหนดขึน้มำ กับ ค ุณสมบตั ิท ี่น ิสติก ำำหนดขึน้มำ

Page 5: Lec12 oop in_php

5

InheritanceInheritance

InheritanceInheritance คือ ค ุณสมบตั ิในกำร คือ ค ุณสมบตั ิในกำร ถ่ำยทอดลักษณะ และ ถ่ำยทอดลักษณะ และ MemberMember จำก จำก

ClassClass หนึ่งท ี่อย ู่เหน ือกว ่ำ หนึ่งท ี่อย ู่เหน ือกว ่ำ (Super class)(Super class) ไปไป ยงัอ ีก ยงัอ ีก ClassClass หนึ่งท ี่อย ูร่ะด ับล ่ำงหนึ่งท ี่อย ูร่ะด ับล ่ำง (Sub (Sub

class)class) โดย โดย ClassClass ที่ร ับกำรถ ่ำยทอด จะม ี ที่ร ับกำรถ ่ำยทอด จะม ี ลักษณะเช่นเด ียวก ัน ลักษณะเช่นเด ียวก ัน ClassClass ต้นแบบทุกต ้นแบบทุก

ประกำรประกำร โดยที่เรำสำมำรถปร ับปร ุง โดยที่เรำสำมำรถปร ับปร ุง

เปล ี่ยนแปลงล ักษณะและ เปล ี่ยนแปลงล ักษณะและ MemberMember จำก จำกClassClass ต้นแบบ ให้ม ีควำมสำมำรถใหม่ๆ ต้นแบบ ให้ม ีควำมสำมำรถใหม่ๆ

ขึน้มำ ช่วยให้ประหยดัเวลำในกำร ขึน้มำ ช่วยให้ประหยดัเวลำในกำรพฒันำพฒันำ

Page 6: Lec12 oop in_php

6

ClassClass ต้นแบบต้นแบบ เร ียกว ่ำ เร ียกว ่ำ ""Base ClassBase Class"" หรือ หรือ ""ParentParent ClassClass""

ClassClass ที่ร ับกำรถ ่ำยทอดที่ร ับกำรถ ่ำยทอด เร ียกว ่ำ เร ียกว ่ำ ""DerivedDerived ClassClass""

หรือ หรือ ""ChildChild ClassClass""

Parent ClassParent Class

Child ClassChild Class Child ClassChild ClassChild ClassChild Class

Page 7: Lec12 oop in_php

7

ClassClass ตน้แบบตน้แบบ คือ คือ PersonPerson

ClassClass ทีร่ ับการถ ่ายทอดทีร่ ับการถ ่ายทอด คือ คือ StudentStudent, ,

NurseNurse, , DoctorDoctor ซึ่งจะม ีค ุณลกัษณะซึ่งจะม ีค ุณลกัษณะ เหม ือน เหม ือน PersonPerson

PersonPerson

NurseNurse DoctorDoctorStudentStudent

Page 8: Lec12 oop in_php

8

InheritanceInheritance

ข้อด ีข ้อด ี สามารถนำา สามารถนำา codecode กลับมาใช้ใหม่ได ้กลับมาใช้ใหม่ได ้โดยไม่ต ้องเข ียนใหม่โดยไม่ต ้องเข ียนใหม่

สามารถแก้ไขที ่สามารถแก้ไขที่ supersuper classclass ทีเ่ด ียว ทีเ่ด ียว โดยไม่ต ้องแก้ไขทุกๆ โดยไม่ต ้องแก้ไขทุกๆ subsub classclass ที่ได ้ท ี่ได ้

ร ับการ ร ับการ extendextend มามา ลดความซับซอ้นของโปรแกรมลดความซับซอ้นของโปรแกรม

ข้อเส ียข ้อเส ีย ถ้าออกแบบไม่ด ี ม ีผลกระทบที่รา้ย ถ้าออกแบบไม่ด ี ม ีผลกระทบที่รา้ยแรงในภายหลังแรงในภายหลัง

Page 9: Lec12 oop in_php

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

Page 10: Lec12 oop in_php

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

Page 11: Lec12 oop in_php

11

ConstructorConstructor

เปน็ฟ ังก ์ช ันท ี่จะถ ูกเร ียกใช้งานโดยเปน็ฟังก ์ช ันท ี่จะถ ูกเร ียกใช้งานโดยอัตโนมตั ิอ ัตโนมตั ิ เม ื่อม ีการ เม ื่อม ีการสร ้างสร ้าง ObjectObject ใหม ่ใหม่

โดยที ่โดยที่ ConstructorConstructor มีร ูปแบบคอืม ีร ูปแบบคอื

หรือหร ือ อาจกำาหนดชื่อของฟังก ์ช ัน ให้ อาจกำาหนดชื่อของฟังก ์ช ัน ให้ตรงก ับชื่อตรงก ับชื่อ ClassClass ก็ได ้ก ็ได ้ เราน ิยมใช้ เราน ิยมใช้

สำาหร ับก ำาหนดค่าเร ิ่มต ้นให้ก ับ สำาหร ับก ำาหนดค่าเร ิ่มต ้นให้ก ับ attributeattribute หรือ หรือ methodmethod

function __construct(){

}

function __construct(){

}

ร ูปแบบ

Page 12: Lec12 oop in_php

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

Page 13: Lec12 oop in_php

13

DestructorDestructor

เปน็ฟงัก ์ช ันท ี่จะถ ูกเร ียกใชง้านโดยเปน็ฟงัก ์ช ันท ี่จะถ ูกเร ียกใชง้านโดยอัตโนมัต ิอ ัตโนมัต ิ ก่อนการทำาลาย ก่อนการทำาลาย ClassClass ที่ใช ้ท ี่ใช ้

งานอยู่ โดยที่ งานอยู่ โดยที่ DestructorDestructor มรี ูปแบบคอืมรี ูปแบบคอื

จะถูกเร ียกใช้เม ื่อม ีการ จะถูกเร ียกใช้เม ื่อม ีการ unsetunset ตัวแปร ตัวแปรClassClass ที่เราสร ้างข ึ้นท ี่เราสร ้างข ึ้น

function __destruct(){

}

function __destruct(){

}

ร ูปแบบ

Page 14: Lec12 oop in_php

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

Page 15: Lec12 oop in_php

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!!

Page 16: Lec12 oop in_php

16

การเรยีกใช ้การเรยีกใช้ ClassClass AttributeAttribute

ในการใช้งานในการใช้งาน ClassClass เม ื่อเราเม ื่อเราตอ้งการที่จะอ ้างอ ิงตอ้งการที่จะอ ้างอ ิง AttributeAttribute ที่อย ู่ท ี่อย ู่ภายในภายใน ClassClass สามารถทำาได ้ โดย สามารถทำาได ้ โดยใช้ใช ้ PointerPointer พเิศษที่ช ือ่ว ่าพเิศษที่ช ือ่ว ่า $this$this ชีไ้ปท ี่ช ีไ้ปท ี่

ช ือ่ของชือ่ของ AttributeAttribute ที่เราต ้องการที่เราต ้องการvar $attribute_name;. . .$this -> attribute_name;

var $attribute_name;. . .$this -> attribute_name;

ร ูปแบบ

Page 17: Lec12 oop in_php

17

การเรยีกใช ้การเรยีกใช้ ClassClass OperationOperation

การเร ียกใช้งาน การเร ียกใช้งาน Class OperationClass Operation จะจะ ทำาได ้ก ็ต ่อม ีการเร ียกใช้งานผ่าน ทำาได ้ก ็ต ่อม ีการเร ียกใช้งานผ่าน

instanceinstance ที่เราสร ้างข ึ้นมาจาก ที่เราสร ้างข ึ้นมาจาก ClassClass

Page 18: Lec12 oop in_php

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

Page 19: Lec12 oop in_php

19

การถ่ายทอดคุณสมบัต ิการถ่ายทอดคุณสมบัต ิInheritanceInheritance เปน็การถ ่ายทอด เปน็การถ ่ายทอด AttributeAttribute และ และ OperationOperation

จาก จาก ClassClass แม่แบบ โดยเราต ้องใช้ค ำา แม่แบบ โดยเราต ้องใช้ค ำา สัง่ สัง่ extendsextends ตามหลังช ื่อ ตามหลังช ื่อ ClassClass แล้วปดิแล ้วปดิ

ท้ายดว้ยชื่อ ท้ายดว้ยชื่อ ClassClass ต้นแบบต้นแบบ

สร ้าง สร ้าง Class Class studentstudent โดยถ่ายทอด โดยถ่ายทอด AttributeAttribute และ และ OperationOperation จาก จาก ClassClass personperson

class student extends person {

}

class student extends person {

}

ร ูปแบบ

Page 20: Lec12 oop in_php

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

Page 21: Lec12 oop in_php

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

Page 22: Lec12 oop in_php

22

OverridingOverriding

ในการ ในการ InheritanceInheritance ClassClass มาเพื่อมาเพ ื่อใชง้านบางคร ั้งเราจ ำาเป ็นต ้องม ีใชง้านบางคร ั้งเราจ ำาเป ็นต ้องม ี

การเปล ีย่นแปลง การเปล ีย่นแปลง ((ModifyModify)) functionfunction การทำาให ้ให ้สอดคล้องก ับ การทำาให ้ให ้สอดคล้องก ับ ClassClass

ใหม่ท ีเ่ราสร ้างข ึ้นใหม่ท ีเ่ราสร ้างข ึ้น การทำา การทำา OverridingOverriding คือค ือ การสร ้าง การสร ้าง

FunctionFunction ใน ใน SubSub ClassClass ที่ม ีช ือ่เหม ือน ที่ม ีช ือ่เหม ือนFunctionFunction ของ ของ ClassClass แม่แบบแม่แบบ เพ ือ่ให ้เพ ือ่ให ้ท ำางานที่แตกต่างไปจากทำางานที่แตกต่างไปจาก Function Function

ของของ Class Class แม่แบบแม่แบบ

Page 23: Lec12 oop in_php

23

การออกแบบ การออกแบบ ClassClass

โดยทัว่ไปเราจะนำา โดยทัว่ไปเราจะนำา ClassClass แทน แทนObjectObject ที่ม ีอย ู่ในชีว ิตจร ิง เช ่น หาก ที่ม ีอย ู่ในชีว ิตจร ิง เช ่น หาก

เราต ้องการออกแบบ เราต ้องการออกแบบ E-CommerceE-Commerce เราก ็ควรแบ่งส ่วนประกอบของ เราก ็ควรแบ่งส ่วนประกอบของ E-E-

CommerceCommerce เป ็นส ่วนๆ เช ่น เป ็นส ่วนๆ เช ่น ShoppingShopping cartcart ก็แยกออกมาสร ้างเป ็น ก็แยกออกมาสร ้างเป ็น ClassClass

เพ ื่อให ้สามารถนำาเอา เพ ื่อให ้สามารถนำาเอา ShoppingShopping cartcart ไปใชง้านได้ก ับเว ็บ ไปใชง้านได้ก ับเว ็บ E-CommerceE-Commerce

อื่นๆ ได้อ ีก อื่นๆ ได้อ ีก

Page 24: Lec12 oop in_php

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