จะเป น รู ป ทรงต า งๆ โดยการเรีย กใช เ มธอดเดีย วกันแตการทํางานตางกัน เพราะวารูป ทรงแตล ะแบบถูก กําหนดการทํางานของมันเอง และมันยังสามารถเรียกใชงานการทํางานใน 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 } }
โดยปกติแลว ในการสรางคลาส เราตองทําการกําหนดระดับการถึงใหกับตัวแปรเสมอ ยกเวนเมธอดที่ มีคาพื้นฐานเปน 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; } } ?>
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; } } ?>
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 เสมอ
หนวยความจํา นั่นหมายความวาออบเจ็คเดียวกันอาจจะมีไดหลายตัวแปรออบเจ็ค การสรางออบเจ็ค ตอไปมาดูตัวอยางการสรางออบเจ็คซึ่งเราจะนําคลาส 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; } }
คําสั่งนี้จะไมทํางานและเกิดขอผิดพลาดขึ้น เพราะวาตัวแปรที่มีระดับการเขาถึงเปน 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");
หลังจากใชงานเสร็จแลว เราใชฟงกชัน 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; }
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.