นางสาวพจมาน ไชยประชาติ รหัสนักศึกษา 59621204031-2

การเขียนโปรแกรมเชิงวัตถุ (Object-oriented programming) หรือ OOP นั้นเปนการเขียน โปรแกรมโดยมองทุกอยางเปนเหมือนวัตถุ (Object) ซึ่งวัตถุจะประกอบไปดวยขอมูล ในรูปแบบของคุณสมบัติ (Property) และกระบวนการทํางาน (Method) คุณสมบัติที่สําคัญของออบเจ็คคือ เมธอดของมันจะทํางาน และจัดการกับ Property ของออบเจ็คนั้น ในภาษา PHP นั้นสนับสนุนการเขียนโปรแกรมเชิงวัตถุตั้งแต PHP 5 ซึ่งเปนการเปลี่ยนแปลงที่สําคัญ ของภาษา PHP ในภาษาที่รองรับการเขียนโปรแกรมเชิงวัตถุนั้น โปรแกรมคอมพิวเตอรจะถูกออกแบบให จัดการกับออบเจ็คที่อาจจะมีปฏิสัมพันธกับออบเจ็คอื่น ในภาษา PHP นั้นออบเจ็คถูกสรางมาจากคลาส (Class bass) ซึ่งหมายความวามันเปนตัวแปรของคลาส (Class instance) หรือกลาวอีกนัยหนึ่ง คลาสเปน ประเภทขอมูลของออบเจ็ค ออบเจ็คและคลาส ภาษาที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุมักจะใชคุณสมบัติการสืบทอด (Inheritance) ซึ่งเปนการ นําโคดเดิมกลับมาใชและเพิ่มเติมการทํางานทั้งในรูปแบบของคลาสและ Prototype ตอไปนี้เปนแนวคิดในการ ทํางานของออบเจ็คและคลาสในภาษา PHP คลาส คื อ ประเภทข อมู ล ที่ นํ า ไปสรางออบเจ็ค คลาสถูก กําหนดขึ้น มาโดยมี ส มาชิกที่เ ป น ตั ว แปร ฟงกชัน คอนสตรัคเตอรและ Destructor หรือกลาวอีกนัยหนึ่งคลาสเปนเทมเพลตในการนําไปสรางออบเจ็ค โดยมีการกําหนดคาเริ่มตนและฟงกชันการทํางาน ออบเจ็ค คือตัวแปรประเภทหนึ่งที่สรางมาจากคลาสหรือ Class Instance ซึ่งออบเจ็คมีการอางถึง สมาชิกของมันที่เปนตัวแปรและเมธอด ซึ่งในภาษา PHP นั้นทุกอยางตางก็เปนออบเจ็คไมวาจะเปน ตัวแปร อาเรย หรือฟงกชัน คลาสเปนเหมือนประเภทขอมูลที่นํามาสรางออบเจ็ค ดังนั้นออบเจ็คหลายออบเจ็คอาจจะ มีการสรางมาจากคลาสเดียวกัน (Class base)

ในการเขียนโปรแกรมเชิงวัตถุ มีคุณสมบัติที่สําคัญที่ทําใหการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น มันชวยใหโคดของคุณยืดหยุน ปลอดภัย และการใชงานโคดเดิมซ้ําๆ โดยไมตองเขียนขึ้นใหม Inheritance Inheritance คือคุณสมบัติการสืบทอด โดยการที่คลาสหนึ่งจะถายทอดโครงสรางของคุณสมบัติ (Property) และกระบวนการทํางาน (Methods) ไปยังคลาสอื่น นี่เปนสิ่งที่จะชวยใหการเขียนโปรแกรมนํา โคดเดิมกลับมาใชและพัฒนาเพิ่มเติมจากคลาสเดิมได คลาสที่สืบทอดคุณสมบัติไปยังคลาสอื่นเราเรียกวาคลาส หลัก (Parent class) และคลาสที่ถูกถายทอดเรียกวาคลาสยอย (Sub class) การสืบทอดนั้นเปนแนวคิดมาจากการดําเนินชีวิตประจําวัน บริษัท A ไดทําการออกแบบรถยนตโดยมี คุณสมบัติและการทํางานที่รถยนตจะทําได สิ่งเหลานี้ถูกกําหนดเปนคลาสของรถยนต คลาสของรถยนตนี้จะ ถูกนําไปสรางหลายโมเดล และทุกโมเดลจะมีการทํางานหลักที่สืบทอดมาจากคลาสของรถยนต เชน การ สตารทเครื่ อง การดับ เครื่อง การวิ่งไปขางหนา การเบรก เปนตน และแตล ะโมเดลอาจจะมีการปรับ แตง คุณสมบัติและเพิ่มการทํางานบางอยางที่นอกเหนือจากที่กําหนดไวในคลาสของรถยนต (Parent class) ได Encapsulation Encapsulation คือคุณสมบัติในการปกปดขอมูลโดยเปนกลไกลในการเขาถึงขอมูลภายในออบเจ็ค จากภายนอก ในการเขียนโปรแกรมเชิงวัตถุในภาษา PHP โดยทั่วไปแลวขอมูลภายในคลาสจะไมถูกปกปดโดย อัตโนมัติ คุณสมบัตินี้เกี่ยวของกับตัวกําหนดการเขาถึง (Access specifier) ซึ่งเปนคําสั่งในการควบคุมการ เขาถึงขอมูลภายในออบเจ็ค เชน คําสั่ง public protected และ private Encapsulation ชวยใหขอมูลที่ไมจําเปนถูกปกปดไวแตมันยังมีอยู ยกตัวอยางเชน บนหนาปดของ รถยนตนั้นจะนําเฉพาะขอมูลที่จําเปนมาแสดง เชน จํานวนรอบ ความเร็วของการวิ่ง ปริมาณน้ํามันเชือเพลิ ่ ง หรือสัญญาณไฟตางๆ ซึ่งในความเปนจริง ในการที่จะไดขอมูลเหลานี้มานั้น อาจจะใขขอมูลหรือวิธีการทํางาน ตางๆ มากมาย ดังนั้นแนวคิดนี้จึงทําใหการเขียนโปรแกรมสามารถกําหนดการเขาถึงตามบริบทของการใชงาน ได Polymorphism Polymorphism คือคุณสมบัติของการมีไดหลายรูปแบบ (Many form) ของออบเจ็ค ในการเขียน โปรแกรมเชิงวัตุ Polymorphism คือการที่คลาสใช Interfaces หรือสืบทอดมาจากคลาส (Abstract class) เดียวกันสําหรับกําหนดการทํางานของคลาส ตัวอยางของเชน คลาสของรูปทรงในสองมิติ (Sharp) ใชในการ กําหนดคุณสมบัติและการทํางานของรูปทรง เชน การวาดรูปทรง การหาขนาด หรือการหาพื้นที่ ซึ่งสิ่งเหลานี้ เปนสิ่งที่รูปทรงทุกประเภทจะตองมี มันจึงเปน Interfaces เดียวกัน และเรานําคลาสของรูปทรงนี้ไปสราง รูปทรงตางๆ เชน ทรงกลม สามเหลี่ยม สี่เหลี่ยม เปนตน เมื่อเราเรียกใชเมธอดในการวาดรูปทรง ผลลัพธที่ได

จะเป น รู ป ทรงต า งๆ โดยการเรีย กใช เ มธอดเดีย วกันแตการทํางานตางกัน เพราะวารูป ทรงแตล ะแบบถูก กําหนดการทํางานของมันเอง และมันยังสามารถเรียกใชงานการทํางานใน Parent class ได รูปแบบของโคด OOP ในภาษา PHP ในการเขียนโปรแกรมเชิงวัตถุ เรามองทุกอยางเปนเหมือนออบเจ็คในโลกจริง ในภาษา PHP ทุกอยาง นั้นเปนออบเจ็ค เชน ตัวแปรประเภทตาง ฟงกชัน และโครงสรางทางภาษา เราจะยกตัวอยางแนวคิดและการ มองในรูปแบบของการเขียนโปรแกรม เพราะเรามองทุกอยางเปนออบเจ็ค เราใหรถยนตเปนออบเจ็ค ซึ่งจะประกอบไปดวยคุณสมบัติคือ สี ชื่อ โมเดล ความจุของเชื้อเพลง จํานวนลอ หมายเลขตัววัดระยะทาง และการทํางานคือ สตารทเครื่อง หยุด เครื่อง วิ่ง การเลี้ยวซาย การเลี้ยวขวา การเบรก เปนตน ซึ่งเมื่อเรานําขอกําหนดเหลานี้มาสรางในรูปแบบการ ทํางานของคลาสในภาษา PHP จะไดดังนี้ class Car { // Properties public $name; public $model; public $color; public $NumberOfDoor; public $fuelCapacity; public $gaugeNumber; // Methods public function startEngine() { // Code to start engine } public function stopEngine() { // Code to stop engine } public function run() { // Code to run a car } public function turnLeft() { // Code to turn left } public function turnRight() { // Code to turn left }

public function brake() { // Code to brake a car } }

ในตัวอยาง เปนการสรางคลาส Car ซึ่งเปนคลาสสําหรับรถยนตที่ประกอบไปดวยคุณสมบัติและการ ทํางาน โดยทั่วไปแลวในการเขียนโปรแกรมเชิงวัตถุ คลาสมักจะนําไปแสดงผลเปน UML diagram ซึ่งเปนการ กําหนดคุณสมบัติและการทํางานของภาพดวยรูปภาพ รูปขางลางนี้เปน UML diagram สําหรับคลาสรถยนต จากโคดตัวอยางขางบน

ในรูปภาพเปน UML diagram จากคลาส Car ซึ่ง UML diagram ก็คือแผนภาพที่งายตอการเขาใจ และใชสําหรับการออกแบบคลาสเพื่อนําไปพัฒนาและสรางความสัมพันธระหวางคลาสกับคลาสอื่น เชน การ สืบทอด การใช Interfaces แผนภาพนี้แสดงรายละเอียดที่กําหนดภายในคลาสอยางคราวๆ เชน คุณสมบัติ และการกําหนดชื่อและประเภทของเมธอด เปนตน ในบทนี้ คุณไดเรียนรูเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุในภาษา PHP เราไดพูดเกี่ยวกับแนวคิดของ คลาสและออบเจ็ค รวมถึงคุณสมบัติที่สําคัญตางๆ ในการเขียนโปรแกรมเชิงวัตถุ เชน Inheritance Encapsulation และ Polymorphism ในบทตอไป จะเปนการเริ่มตนของการเขียนโปรแกรมเชิงวัตถุในภาษา PHP

คลาส ในภาษา PHP คลาสคืออะไร คลาส (Class) คือประเภทขอมูลที่นําไปสรางออบเจ็ค (Object) คลาสถูกกําหนดขึ้นมาโดยมีสมาชิกที่ เปนตัวแปร ฟงกชัน และคอนสตรัคเตอร (Constructor) และ Destructor หรือกลาวอีกนัยหนึ่งคลาสเปนเทม เพลตในการนําไปสรางออบเจ็คโดยมีการกําหนดคาเริ่มตนและฟงกชันการทํางาน ในการเขียนโปรแกรมเชิงวัตถุ เรามองทุกอยางเปนเหมือนออบเจ็คที่มีคุณสมบัติ (Property) และการ ทํางาน (Method) ยกตัวอยางเชน รถยนตเปนออบเจ็ค สี กําลังเครื่องยนต ความจุของถังนํามัน ชื่อรุนของ รถยนต ปที่ผลิต เหลานี้เราเรียกวาคุณสมบัติ การสตารทเครื่อง การดับเครื่อง จะเปนฟงกชันการทํางาน นี่เปนรูปแบบของการประกาศคลาสในภาษา PHP class ClassName { // members and specifications ... }

โดยที่ ClassName เปนชื่อของคลาสที่มีหลักการตั้งชื่อเหมือนตัวแปร แตสําหรับคลาส โดยทั่วไปแลวเรา จะนิยมใชชื่อโดยขึ้นตนดวยตัวพิมพใหญและในระหวางคํา ภายในคลาสจะเปนกําหนดสมาชิกของคลาสโดยมี การกําหนดการเขาถึง (Visibility) นี่เปนประเภทสมาชิกของคลาสที่สามารถมีไดในภาษา PHP •





Properties- คือสมาชิกที่เปนคุณสมบัติของคลาสที่เปนขอมูลประเภทตัวแปร ซึงอาจจะเปนตัวแปร พื้นฐาน คาคงที่ หรือออบเจ็ค Method- คือการกําหนดการทํางานของคลาส เมธอดคือคําที่ใชเรียกฟงกชันเมื่อมันถูกประกาศอยูใน คลาส หรือในบริบทของการเขียนโปรแกรมเชิงวัตถุ Constructor และ Destructor- คอนสตรัคเตอรคือเมธอดชนิดหนึ่งที่จะถูกเรียกใชในตอนที่ออบ เจ็คถูกสราง มันมักจะใชสําหรับกําหนดคาเริ่มตนใหกับออบเจ็ค สวน Destructor คือเมธอดที่จะถูก เรียกใชเมื่อออบเจ็คถูกทําลาย ทั้งสองเมธอดนี้มีชื่อของมันโดยเฉพาะ

โดยปกติแลว ในการสรางคลาส เราตองทําการกําหนดระดับการถึงใหกับตัวแปรเสมอ ยกเวนเมธอดที่ มีคาพื้นฐานเปน public ถาหากไมมีการกําหนดระดับการเขาถึง (Access specifier) มาดูตัวอยางการ สรางคลาสในภาษา PHP
public $lastName; public $homeTown; private $birthYear; public function indroduce() { echo "I'm $this->firstName $this->lastName\n"; echo "I live in $this->homeTown\n"; } public function setBirthYear($birthYear) { $this->birthYear = $birthYear; } public function getAge() { $currentYear = 2017; $age = $currentYear - $this->birthYear; return $age; } } ?>

ในตัวอยาง เปนการประกาศคลาสชื่อ User ซึ่งเปนคลาสสําหรับเก็บขอมูลของผูใช คลาสนี้มีสมาชิก เปนตัวแปร 4 ตัว สําหรับเก็บขอมูลของผูใช มีคอนสตรีคเตอรสําหรับกําหนดคาเริ่มตนใหกับออบเจ็ค และ มี 3 เมธอด ทั้งตัวแปรและเมธอดที่เปนสมาชิกของคลาสนั้นจะตองมีการกําหนดระดับการเขาถึง เชน ตัวแปร $firstName มีระดับการเขาถึงเปนแบบ public และเมธอด indroduce() มีระดับการเขาถึงเปนแบบ public สวนตัวแปร $birthYear มีระดับการเขาถึงเปนแบบ private อยางไรก็ตามเราจะพูดเกี่ยวกับ Access specifiers ในภายหลัง

Constructor และ Destructor ในการเขียนโปรแกรมบางครั้ง คุณก็จําเปนตองการกําหนดคาใหกับออบเจ็คในตอนที่สรางและทํา บางอย า งหลั ง จากที่ อ อบเจ็ ค ถู ก ทํ า ลาย ซึ่ ง คุ ณ สามารถกํ า หนดการงานได โ ดยประกาศเมธอด __construct() และ __destruct() ซึ่งเปนทางเลือกเมื่อคุณสรางคลาส

firstName = $firstName; $this->lastName = $lastName; } public function __destruct() { // code when object is destroyed } public function indroduce() { echo "Hello, my $this->firstName $this->lastName."; echo "I live in $this->homeTown."; } public function setBirthYear($birthYear) { $this->birthYear = $birthYear; } public function getAge() { $currentYear = 2017; $age = $currentYear - $this->birthYear; return $age; } } ?>

นี่เปนตัวอยางในการประกาศคอนสตรัคเตอรและ Destructor ในภาษา PHP สําหรับคอนสตรัคเตอร นั้น ในตอนสร า งออบเจ็ค คุ ณจํ าเป น ต องสงพารามิเตอรที่เปนชื่อและนามสกุลขของผูใชมาดว ยเสมอ สําหรับ Destructor นั้นจะถูกเรียกใชเมื่อมีการทําลายออบเจ็ค เชน การใชฟงกชัน unset() เปนตน

เมื่อคลาสมีการประกาศ Constructor ภายในคลาส ในตอนสรางออบเจ็ค คุณตองสงพารามิเตอร สําหรับ Constructor เสมอ

Access specifiers Access specifiers คือคําสั่งในการกําหนดการเขาถึงที่เราใชกับการประกาศตัวแปรภายในคลาสหรือเรียก อีกอยาหนึงวา Property Visibility ในภาษา PHP มี Access specifier อยูดวยกัน 3 แบบดังนี้ • •

• •

public - ตัวแปรหรือเมธอดสามารถเขาถึงไดจากทุกที่ในโปรแกรม protected - ตัวแปรหรือเมธอดสามารถเขาถึงไดจากในคลาสเดียวกันหรือคลาสที่ไดรับการสืบทอด (Inheritance) private - ตัวแปรหรือเมธอดสามารถเขาถึงไดจากในคลาสเดียวเทานั้น class User { public $firstName; public $lastName; public $homeTown; private $birthYear; ...

นี่เปนการกําหนด Access specifier ใหกับตัวแปรซึ่งเราจะกําหนดไวหนาตัวแปรหรือฟงกชัน อยางไร ก็ตาม คุณจะไดเรียนเกี่ยวกับ Class Visibility ในภายหลังของบทเรียนนี้ class ClassName { // Can only be public function __construct($firstName, $lastName) { ... } // This is public function methodName() { ... } }

ในภาษา PHP เมธอดสามารถที่จะไมกําหนด Access specifier ได โดยเมธอดนั้นจะมีการเขาถึงเปน แบบ public และ Construct นั้นจะเปน public เสมอ

ออบเจ็ค ในภาษา PHP ออบเจ็คคืออะไร ออบเจ็ค (Object) คือตัวแปรประเภทหนึ่งที่สรางมาจากคลาสหรือ Class Instance ออบเจ็คมีการอางถึง สมาชิกของมันที่เปนตัวแปรและเมธอด ซึ่งในภาษา PHP นั้นทุกอยางตางก็เปนออบเจ็คไมวาจะเปน ตัวแปร อาเรย หรือฟงกชัน และคลาสเปนเหมือนประเภทขอมูลที่นํามาสรางออบเจ็ค ดังนั้นออบเจ็คหลายออบเจ็ค อาจจะมีการสรางมาจากคลาสเดียวกัน (Class base) ในภาษา PHP ออบเจ็ คนั้ น เป น ข อมูล ประเภท Reference

type

ที่อางถึงตําแหนงของขอมูล ใน

หนวยความจํา นั่นหมายความวาออบเจ็คเดียวกันอาจจะมีไดหลายตัวแปรออบเจ็ค การสรางออบเจ็ค ตอไปมาดูตัวอยางการสรางออบเจ็คซึ่งเราจะนําคลาส User จากบทกอนหนาที่เราไดสรางไวมาสราง ออบเจ็ค firstName $this->lastName\n"; echo "I live in $this->homeTown\n"; } public function setBirthYear($birthYear) { $this->birthYear = $birthYear; } public function getAge() { $currentYear = 2017; $age = $currentYear - $this->birthYear; return $age; } }

$user1 = new User(); $user1->firstName = "Mateo"; $user1->lastName = "Marcus"; $user1->homeTown = "Berlin"; $user1->setBirthYear(1988); $user1->indroduce(); echo "My age is " . $user1->getAge() . "\n"; $user2 = new User(); $user2->firstName = "Rasmus"; $user2->lastName = "Lerdorf"; $user2->homeTown = "Qeqertarsuaq"; $user2->setBirthYear(1968); echo "Name: $user2->firstName $user2->lastName\n"; echo "Home town: $user2->homeTown\n"; echo "Age: " . $user2->getAge() . "\n"; ?>

ในตัวอยาง เราไดสรางออบเจ็คจากคลาส User ซึ่งเปนคลาสในการเก็บขอมูลของผูใช เชน ชื่อ นามสกุล เมื่อง และปเกิด และฟงกชันในการทํางาน ซึ่งเราไดนําคลาสมาสรางสองออบเจ็คคือ $user1 และ $user2 $user1 = new User();

ในคําสั่งนี้เปนการสรางออบเจ็ค $user1 จากคลาส User โปรแกรมจะทําการสรางตัวแปรและเมธอด สําหรับออบเจ็คนี้ และเราใช $user1 เปนตัวแปรในการเขาถึงคาตางๆ ของออบเจ็ค $user1->firstName = "Mateo"; $user1->lastName = "Marcus"; $user1->homeTown = "Berlin"; $user1->setBirthYear(1988); $user1->indroduce(); echo "My age is " . $user1->getAge() . "\n";

เราไดกําหนดคาใหกับตัวแปร (Property) ของออบเจ็ค $user1 โดยการเขาถึงตัวแปรและเมธอด ภายในออบเจ็ค จะใชสัญลักษณ -> ตามดวยชื่อของตัวแปรหรือเมธอด สําหรับตัวแปรนั้นจะไมมีเครื่องหมาย $ นําหนา

$user2 = new User(); $user2->firstName = "Rasmus"; $user2->lastName = "Lerdorf"; $user2->homeTown = "Qeqertarsuaq"; $user2->setBirthYear(1968);

และเราสรางออบเจ็ค $user2 สําหรับเก็บขอมูลของอีกคน โดยทั้งออบเจ็คทั้งสองจะมีโครงสราง ขอมูลที่เหมือนกัน ซึ่งแตละออบเจ็คจะมีตัวแปรและเมธอดของมันเอง แตที่แตกตางกันคือขอมูลภายในออบ เจ็ค echo "Name: $user2->firstName $user2->lastName\n"; echo "Home town: $user2->homeTown\n"; echo "Age: " . $user2->getAge() . "\n";

ในการแสดงผล เราเขาถึงคาของออบเจ็คโดยตรงผานตัวแปรออบเจ็ค $user2 สําหรับการเขาถึงคา ของตัวแปรภายในออบเจ็คนั้นจะสามารถเขาถึงไดสําหรับตัวแปรที่มีการกําหนดระดับการเขาถึงเปน public เทานั้น และเนื่องจากตัวแปร $birthYear มีระดับการเขาถึงเปน private เราจะไมสามารถเขาถึงตัวแปรได โดยตรงไดจากตัวแปรของออบเจ็ค $user->birthYear = 1968;

คําสั่งนี้จะไมทํางานและเกิดขอผิดพลาดขึ้น เพราะวาตัวแปรที่มีระดับการเขาถึงเปน private จะไม สามารถเขาถึงจากภายนอกคลาสได I'm Mateo Marcus I live in Berlin My age is 29 Name: Rasmus Lerdorf Home town: Qeqertarsuaq Age: 49

ผลลัพธฺในการทํางานของโปรแกรม

การสรางออบเจ็คกับ Constructor ตอไปจะเปนตัวอยางการสรางออบเจ็คกับคลาสที่มี Constructor ในภาษา PHP มันใชสําหรับ กําหนดคาเริ่มตนใหกับออบเจ็คในตอนที่ออบเจ็คถูกสราง และเราจะทําลายออบเจ็คเพื่อให Destructor ของ ออบเจ็คทํางาน
public $firstName; public $lastName; public $homeTown; private $birthYear; public function __construct($firstName, $lastName) { echo "Object created\n"; $this->firstName = $firstName; $this->lastName = $lastName; } public function __destruct() { echo "$this->firstName's object destroyed\n"; } public function indroduce() { echo "I'm $this->firstName $this->lastName\n"; echo "I live in $this->homeTown\n"; } public function setBirthYear($birthYear) { $this->birthYear = $birthYear; } public function getAge() { $currentYear = 2017; $age = $currentYear - $this->birthYear; return $age; } } $user1 = new User("Mateo", "Marcus"); $user1->homeTown = "Berlin"; $user1->setBirthYear(1988); $user1->indroduce(); echo "My age is " . $user1->getAge() . "\n"; unset($user1); ?>

ในตัวอยางเปนการสรางออบเจคจากคลาส User เชนเดิม แตในตอนนี้เราไดเพิ่ม Constructor และ Destructor ภายในคลาสดวย $user1 = new User("Mateo", "Marcus");

ในคําสั่งนี้ เปนการสรางออบเจ็คกับคลาสที่มี Constructor ซึ่งเราตองสงพารามิเตอรที่ไดกําหนดไวใน Constructor เสมอ และ Constructor จะถูกเรียกใชงานทันทีหลังจากที๋โปรแกรมจองหนวยความจําสําหรับ ตัวแปรของออบเจ็ค $user1 สําเร็จ unset($user1);

หลังจากใชงานเสร็จแลว เราใชฟงกชัน unset() ในการยกเลิกการประกาศหรือลบออบเจ็คออกไปจาก หนวยความจํา ซึ่งจะทําให Destructor ถูกเรียกใชงาน และออบเจ็คถูกลบ Object created I'm Mateo Marcus I live in Berlin My age is 29 Mateo's object destroyed

นี่เปนผลลัพธในการทํางานของโปรแกรม คําสั่ง $this การอางถึงสมาชิกของออบเจ็ค ในภาษา PHP คําสั่ง $this เปนคําสั่งในการอางถึงตัวแปรหรือเมธอดภายในคลาส จากตัวอยางของ คลาส User เราไดเขาถึงตัวแปรตางๆ ของออบเจ็คภายในคลาส public function setBirthYear($birthYear) { $this->birthYear = $birthYear; } public function getAge() { $currentYear = 2017; $age = $currentYear - $this->birthYear; return $age; }

ในตัวอยาง เราเขาถึงตัวแปร $birthYear ดวยคําสั่ง $this->birthYear สําหรับกําหนดคาใหกับออบ เจ็คและนําคาจากออบเจ็คมาแสดงผล สําหรับเมธอดก็เชนกัน คุณสามารถเขาถึงเมธอดอื่นๆ ภายในคลาสได เชน $this->methodName()

Static methods and variables ในการประกาศตัวแปรและเมธอดในคลาสนั้น เราสามารถใชคําสั่ง static เพื่อประกาศได โดยทั่วไป แลวเราใชคําสั่ง static เพื่อสรางตัวแปรหรือเมธอดที่ทํางานไมขึ้นกับออบเจ็ค นั่นหมายความวาตัวแปรหรือ เมธอดดังกลาวนั้นไมไดเปนสมาชิกของออบเจ็ค เพียงแตมันอาศัยอยูในคลาสดวยเทานั้น มาดูตัวอยางการใช งาน static เมธอดในภาษา PHP firstName . ' ' . $this->lastName; } public static function helloUser($name) { echo 'Hello ', $name, '\n'; }

}

$user = new User(); $user->firstName = 'Bob'; $user->lastName = 'Conley'; echo $user->getFullName(), '\n'; echo User::helloUser('Tommy'); echo User::helloUser($user->getFullName()); ?>

ในตัวอยาง คลาส User นั้นมีสองตัวแปรสําหรับเก็บชื่อและเมธอดสําหรับรับคาชื่อแบบเต็ม ซึ่งเหลานี้ ถูกสรางโดยไมไดใชคําสั่ง static นําหนา ดังนั้นสมาชิกเหลานี้เปนของออบเจ็ค และเรามีเมธอด helloUser() ซึ่งเปน static เมธอดโดยการใชคําสั่ง static นําหนาตัวแปรหรือเมธอดที่ตองการใหเปน static โดยเมธอดนี้ใช สําหรับแสดงขอความทักทายชื่อที่สงเขามา สังเกตวามันไมไดมีสวนเกี่ยวของกับตัวแปรหรือเมธอดอื่นๆ ใน คลาสเลย echo User::helloUser('Tommy'); echo User::helloUser($user->getFullName());

ในการเรียกใชงาน static เมธอดนั้นสามารถทําไดโดยใชชื่อคลาส ตามดวยเครื่องหมาย :: แลวตาม ดวยชื่อของเมธอดปกติ

สามารถเขาไปดูขอมูลเพิ่มเติมไดที่ http://marcuscode.com/lang/php/object-oriented-programming

PHP+OOP.pdf

Whoops! There was a problem loading more pages. Whoops! There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. PHP+OOP.pdf. PHP+OOP.pdf. Open. Extract. Open with. Sign In. Main menu.

143KB Sizes 0 Downloads 163 Views

Recommend Documents

No documents