ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

หลักการ เขียน php แบบ oop
OOP และ PHP: ตัวอย่างจากรูปสี่เหลี่ยม

ความรู้พื้นฐาน? HTML และ PHP เบื้องต้น

PHP OOP เป็นการเขียน??โปรแกรมเชิงวัตถุ ที่กำลังเป็นที่นิยมอย่างแพร่หลาย โปรแกรม ASP ในปัจจุบันได้เปลี่ยนโฉมจาก ภาษา script เป็น ASP.NET ซึ่งเป็นโปรแกรมเชิงวัตถุอย่างสมบูรณ์ PHP ก็เช่นเดียวกัน เพราะ OOP ช่วยให้เขียนโปรแกรมได้อย่างสง่างาม ตรวจสอบได้ง่าย สามารถนำโค้ดที่เขียนไว้ กลับมาใช้ใหม่ได้อย่างประหยัด จึงสมควรอย่างยิ่งที่จะต้องทำความเข้าใจเรื่องของ OOP เพื่อเป็นพื้นฐานในการเขียนโปรแกรมขั้นสูงต่อไป
ในบทความนี้ จะพูดถึงหลักการของ OOP ที่ใช้ใน โปรแกรม PHP
ทุกคนคงเคยเรียนเรื่องการหาพื้นที่สี่เหลี่ยมมาแล้ว สูตรการหาพื้นที่ คือ ความยาว X ความสูง ถ้าจะคำนวณหาเส้นรอบรูปก็เอาความยาวกับความสูงคูณด้วย 2 แล้วเอามาบวกกัน ทีนี้สมมติว่า ต้องการเขียนโปรแกรมบนเว็บ ให้คำนวณพื้นที่สี่เหลี่ยม โดยใช้ PHP วิธีที่ง่ายที่สุด คือ การสร้างฟอร์มเพื่อรับค่าความยาว และ ความสูง แล้วใช้ PHP ให้คำนวณหาพื้นที่ ซึ่งจะได้โค้ด ดังนี้
ใช้ HTML สร้างฟอร์มเพื่อรับค่าความยาวและความสูง บันทึกและตั้งชื่อไฟล์ว่า rectangle.html



ความยาว:

ความสูง:

ส่งข้อมูล ">



จากนั้นก็จะสร้างไฟล์ PHP เพื่อรับข้อมูลจาก rectangle.html โดยใช้ชื่อว่า rectangle.php ดังนี้

$w=$_POST["width"];???? //รับค่าจากไฟล์ html
$h=$_POST["height"];
$area = $w * $h; ?? // คำนวนพื้นที่
$perimeter = ($w + $h) * 2;?? // คำนวนเส้นรอบรูป
?>


ความยาว:

ความสูง:

พื้นที่: ตารางหน่วย

เส้นรอบรูป:


จากตัวอย่างข้างต้นแทนที่จะเขียนโปรแกรมให้คำนวณทุกครั้ง อาจจะเขียนเป็นฟังชั่น ให้คำนวณหาพื้นที่และเส้นรอบรอบ แล้วเรียกใช้เมื่อต้องการ
ตัวอย่างต่อไปนี้ เราจะสร้างฟังชั่นเพื่อให้คำนวณพื้นที่และเส้นรอบรูปสี่เหลี่ยม โดยจะสร้างไฟล์ใหม่ใช้ชื่อว่า rect.php ในไฟล์นี้ เราจะเขียนฟังชั่นดังกล่าว ดังนี้
function rect_area($width,$height)
{
return $width * $height;
}
function rect_perim($width,$height)
{
return ($width + $height) * 2;
}
?>
บันทึกไว้ ในไฟล์ชื่อ rect.php
เราจะเรียกใช้ฟังชั่นนี้จากไฟล์ rectangle.php แต่จะแก้ไขใหม่ ไม่ต้องมีการคำนวณ แต่จะเรียกใช้ฟังชั่นจาก rect.php ดังนี้
require('rect.php'); // โหลดไฟล์ที่มีฟังชั่นที่เราสร้างแล้ว
$w=$_POST["width"];
$h=$_POST["height"];
$area = rect_area($w,$h);? //เรียกใช้ฟังชั่น คำนวณพื้นที่
$perimeter = rect_perim($w,$h);? // เรียกใช้ฟังชั่นคำนวณเส้นรอบรูป
?>
แสดงผล? --
จากตัวอย่างข้างต้นแทนที่จะเขียนโปรแกรมให้คำนวณทุกครั้ง อาจจะเขียนเป็นฟังชั่น ให้คำนวณหาพื้นที่และเส้นรอบรอบ แล้วเรียกใช้เมื่อต้องการ ตัวอย่างต่อไปนี้ เราจะสร้างฟังชั่นเพื่อให้คำนวณพื้นที่และเส้นรอบรูปสี่เหลี่ยม โดยจะสร้างไฟล์ใหม่ใช้ชื่อว่า rect.php ในไฟล์นี้ เราจะเขียนฟังชั่นดังกล่าว ดังนี้function rect_area($width,$height) { ?????????????????? return $width * $height; } function rect_perim($width,$height) { return ($width + $height) * 2; } ?>บันทึกไว้ ในไฟล์ชื่อ rect.phpเราจะเรียกใช้ฟังชั่นนี้จากไฟล์ rectangle.php แต่จะแก้ไขใหม่ ไม่ต้องมีการคำนวณ แต่จะเรียกใช้ฟังชั่นจาก rect.php ดังนี้????????? require('rect.php'); // โหลดไฟล์ที่มีฟังชั่นที่เราสร้างแล้ว$w=$_POST["width"];$h=$_POST["height"];$area = rect_area($w,$h);? //เรียกใช้ฟังชั่น คำนวณพื้นที่$perimeter = rect_perim($w,$h);? // เรียกใช้ฟังชั่นคำนวณเส้นรอบรูป?> ???????????????? แสดงผล? -->

ความยาว:?
ความสูง:
พื้นที่:?
เส้นรอบรูป:




การเขียนโปรแกรมเชิงวัตถุ หรือ OOP คล้ายกับฟังชั่น เพียงแต่เราจะสร้างวัตถุต้นแบบ หรือภาษาของ PHP เรียกว่า CLASS เช่น เราอาจจะสร้าง วัตถุที่เรียกว่า Rectangle โดยให้มันมีการคำนวณหาพื้นที่ และคำนวณหาเส้นรอบรูป ดังนั้น ถ้าเราเรียกใช้ Rectangle และส่งค่า ความยาวและความสูงให้ เราสามารถเรียกค่าพื้นที่ และค่าความยาวเส้นรอบรูปได้เลย
เราจะปรับไฟล์ rect.php เสียใหม่ เพื่อให้ไฟล์นี้ สร้าง CLASS ที่ชื่อว่า Rectangle ดังนี้


class Rectangle
{
var $width;
var $height;

function Rectangle($width, $height)
{
$this->width = $width;
$this->height = $height;
}

function area()
{
return $this->width * $this->height;
}

function perimeter()
{
return ($this->width + $this->height) * 2;
}
}
?>
เรามาดูรายละเอียดทีละบรรทัด
เราเริ่มจากการบอกว่า ต่อไปนี้เราจะสร้างแม่แบบ หรือ CLASS ที่ชื่อว่า Rectangle

class Rectangle
{


ชื่อของ CLASS เรามักจะขึ้นต้นด้วยอักษรตัวใหญ่ PHP ไม่บังคับว่าจะต้องเป็นตัวใหญ่ แต่ทำให้เหมือน ๆ กับชาวบ้านก็จะดี เพราะจะเข้าใจกันได้ง่ายขึ้น
ต่อมาเรา ประกาศชื่อตัวแปร คือ $width และ $height


var $width;
var $height;


นี่เป็นการประกาศตัวแปรที่อยู่ในวัตถุที่เรากำลังสร้าง เท่ากับเป็นการพูดว่า เจ้าสี่เหลี่ยมที่จะสร้างขึ้นจากแม่แบบ (CLASS) อันนี้ทุกรูป จะมีความยาว และความสูง ลักษณะที่กำหนดให้วัตถุอย่างนี้ ศัพท์ทาง PHP เรียกว่าเป็น Properties คือหมายถึง คุณสมบัติของวัตถุหรือ Object ซึ่งในที่นี้ก็คือรูปสี่เหลี่ยมที่เกิดจากแม่แบบที่เรากำลังสร้างนี้ทุกรูป ที่จะต้องมี? นั่นคือ รูปสี่เหลี่ยมที่เกิดจากแม่แบบ หรือ CLASS นี้ทุกรูป จะมีความกว้างและความยาว
ต่อจากนั้นก็เป็นการสร้างฟังชั่น ให้คำนวณ หาพื้นที่

function Rectangle($width, $height)
{


ขอให้สังเกตว่า ชื่อฟังชั่น Rectangle เป็นชื่อเดียวกับชื่อของแม่แบบ หรือ CLASS พร้อมทั้งกำหนดตัวแปรเอาไว้ด้วย 2 ตัว คือ $width และ $height? ฟังชั่นที่มีชื่อเดียวกับชื่อ CLASS นี้ เราเรียกว่าเป็น ตัวสร้าง หรือ constructor
หน้าที่หลักของ constructor คือการกำหนดค่าต่าง ๆ ให้วัตถุ และพร้อมที่จะเรียกใช้งาน ในกรณีของเรา เราจะกำหนดค่า ความยาวและความสูงให้แก่ constructor ของเรา ดังนี้
$this->width = $width;
$this->height = $height;
ตัวแปร $this ในที่นี้หมายถึง วัตถุที่เรากำลังสร้างขึ้น ดังนั้น $this->width = $width;
จึงหมายถึง ความกว้างของวัตถุที่เรากำลังสร้างขึ้นนี้ เท่ากับ ตัวแปรความกว้าง(ที่กำหนดไว้ข้างต้น ซึ่งเป็นตัวแปรที่รับค่าที่ส่งเข้ามา)
เครื่องหมาย -> แสดงความเป็นเจ้าของ เช่น $this->width หมายถึง ความกว้างของวัตถุที่เรากำลังสร้างขึ้นนี้
ต่อจากนั้นก็เป็นฟังชั่นการหาพื้นที่และคำนวณเส้นรอบรูป
function area()
{
return $this->width * $this->height;
}

function perimeter()
{
return ($this->width + $this->height) * 2;
}


ดูเผิน ๆ ฟังชั่นนี้คล้ายกับฟังขั่น rect_area และ rect_perim เพียงแต่เราไม่ได้ส่งค่าอะไรไปให้เท่านั้น เพราะค่าความยาวและความสูงของวัตถุที่เรากำลังสร้างมีอยู่แล้ว เรียกใช้ได้ทันที
ฟังชั่นของวัตถุที่มีอยู่ประจำตัวในลักษณะนี้ เราเรียกว่าเป็น methods หรือวิธีการ ซึ่งเป็นการคำนวณหาค่าต่าง ๆ โดยใช้คุณสมบัติหรือ properties ของวัตถุที่มีอยู่
ทั้งหมดที่กล่าวมา เป็นการวางแม่แบบว่า จะใช้สร้างรูปสี่เหลี่ยมที่มีคุณสมบัติ (properties) 2 ประการคือ ความกว้างและความสูง และสี่เหลี่ยมที่สร้างนี้ จะมีวิธีการ (methods) ให้คำนวณหาค่าพื้นที่ และค่าความยาวรอบรูป
แต่นั่นเป็นเพียงแค่แม่แบบ ยังไม่ใช่ตัวจริง การเรียกใช้แม่แบบ เรียกได้ดังนี้
new Rectangle(20, 5)
เราใช้คำว่า new เพื่อบอก PHP ว่า ให้สร้างวัตถุใหม่(new object) จากแม่แบบ (class) ที่ชื่อว่า Rectangle พร้อมกันนั้นเราก็ส่งค่า ความยาว และ ความสูง ไปให้ด้วย เพราะเป็นคุณสมบัติที่สี่เหลี่ยมที่เรากำหนดว่าจะต้องมีคุณสมบัตินี้ ค่าที่ส่งไปคือ ความกว้าง 20 และความสูง = 5
วัตถุที่เราสร้างจากแม่แบบ Rectangle ต้องมีชื่อ เราจะเอาวัตถุใหม่ที่สร้างมาไว้ในตัวแปรวัตถุขอบเรา ซึ่งจะใช้ชื่อว่า $myRectangle ดังนี้
$myRectangle = new Rectangle(20, 5);
ถ้าต้องการเปลี่ยนค่าความกว้าง ก็สามารถทำได้เลย เช่น ต้องการเปลี่ยนค่าความกว้างเป็น 50 ทำดังนี้
$myRectangle -> width = 50;
ถ้าต้องการหาพื้นที่ ก็สั่งได้โดยตรง เพราะรูปสี่เหลี่ยมใหม่ของเรา คือ myRectangle มีวิธีการหาพื้นที่อยู่แล้ว เพราะสร้างมาจากแม่แบบที่เรากำหนดไว้ตอนแรก
echo $myRectangle -> area();? // ในที่นี้จะพิมพ์ 250 คือ กว้าง 50 และสูง = 5
เราสามารถสร้างสี่เหลี่ยมและหาพื้นที่ได้อีกหลาย รูป เช่น
$rectangle1 = new Rectangle(10,20);
$rectangle2 = new Rectangle(30,40);
echo $rectangle1 ->area(); // ได้ค่า '200'
echo $rectangle2->perimeter(); // ได้ค่า '140'
เพื่อให้เห็นภาพรวมทั้งหมด จะเปลี่ยนไฟล์เดิมคือ rectangle.php ให้สร้างรูปสี่เหลี่ยมจากแม่แบบ และให้พิมพ์ค่าพื้นที่ พร้อมทั้งเส้นรอบรูป ดังนี้
require('rect.php');
$w = $_POST["width"];
$h = $_POST["height"];
$myRectangle = new Rectangle($w,$h);
?>


ความยาว: width?>

ความสูง: height?>

พื้นที่: ?area()?>

เส้นรอบรูป: perimeter()?>




จะเห็นว่า OOP ช่วยให้เราสามารถใช้แม่แบบ หรือ CLASS สร้าง วัตถุ (objects) ได้อีกจำนวนมาก โดยใช้โค้ดของเดิม ทำให้ดูง่ายไม่ยุ่งยาก แต่ทั้งหมดนี้เป็นเพียงพื้นฐานเบื้องต้นเท่านั้น แต่เพียงพอที่จะเป็นพื้นฐานในการศึกษาต่อไป



โดย อ.ทองจุล ขันขาว

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
การเสียภาษีหัก ณ ที่จ่าย สำหรับบุคคลธรรมดาและนิติบุคคล
โดย nnamfon.26 พฤ 24 ต.ค. 2019 11:38 am บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
0
4
พฤ 24 ต.ค. 2019 11:38 am โดย nnamfon.26
วิธีแปลงโค้ด PHP เป็น HTML ได้อย่างไรบ้างคะ
โดย mstsksmstsks พฤ 24 ต.ค. 2019 11:12 am บอร์ด HTML CSS
0
3
พฤ 24 ต.ค. 2019 11:12 am โดย mstsksmstsks
การทำให้กรอบสีฟ้า เวลาทำให้ scroll bar เลื่อนลงมาได้อย่างอัตโนมัติหายไป
โดย ชัยรัตน์ วงศ์เพชรพัชระ พ 23 ต.ค. 2019 11:12 pm บอร์ด JavaScript & Jquery Ajax
1
47
พฤ 24 ต.ค. 2019 10:15 am โดย mindphp
คุณสมบัติของนักบัญชีที่ดี
โดย nnamfon.26 พ 23 ต.ค. 2019 6:09 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
0
14
พ 23 ต.ค. 2019 6:09 pm โดย nnamfon.26
กรณีบริษัทจะทำใบวางบิลให้กับลูกค้า ที่มี invoice ต่างสาขา สามารถทำใบวางบิลได้มั้ย
โดย thatsawan พ 23 ต.ค. 2019 5:31 pm บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
32
พ 23 ต.ค. 2019 5:31 pm โดย thatsawan
แหล่งท่องเที่ยวในจังหวัดภูเก็ต
โดย nnamfon.26 พ 23 ต.ค. 2019 4:59 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
10
พ 23 ต.ค. 2019 4:59 pm โดย nnamfon.26
อยากทราบว่า แคปหน้าจอในโปรแกรม netbean ตอนที่กำลังนำเมาส์ไปชี้ตัวเลือกใน list ได้ยังไงครับ
โดย bankjittapol อ 22 ต.ค. 2019 6:31 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
1
50
อ 22 ต.ค. 2019 6:43 pm โดย mindphp
ความรู้เกี่ยวกับการบัญชีโรงแรม
โดย nnamfon.26 อ 22 ต.ค. 2019 6:21 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
0
26
อ 22 ต.ค. 2019 6:21 pm โดย nnamfon.26
จำทำอย่างไรให้ค่า input เดียวเก็บได้หลายตัวแปลครับ
โดย jamepiyawat อ 22 ต.ค. 2019 5:39 pm บอร์ด Programming - PHP
3
44
อ 22 ต.ค. 2019 6:30 pm โดย jamepiyawat
Tips : เปิดไฟล์ .CSV ด้วย excel (ข้อมูลในไฟล์มีมากกว่า 1 ล้านแถว)
โดย jataz2 อ 22 ต.ค. 2019 5:19 pm บอร์ด Programming - C/C++ & java & Python
0
19
อ 22 ต.ค. 2019 5:19 pm โดย jataz2
วิธีทำให้ text box มีภาพพื้นหลัง ต้องทำอย่างไร ครับ
โดย jamepiyawat อ 22 ต.ค. 2019 5:19 pm บอร์ด HTML CSS
4
39
อ 22 ต.ค. 2019 6:03 pm โดย jamepiyawat
บัญชีบริหาร คืออะไร
โดย nnamfon.26 อ 22 ต.ค. 2019 5:17 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
0
57
อ 22 ต.ค. 2019 5:17 pm โดย nnamfon.26
จะทำอย่างไรให้ข้อความของ placeholder แสดงข้อความได้หลายบรรทัดครับ
โดย jamepiyawat อ 22 ต.ค. 2019 4:41 pm บอร์ด HTML CSS
3
57
อ 22 ต.ค. 2019 6:04 pm โดย jamepiyawat
สร้าง selectซ้อน2ชั้น โดยดึงค่าจาก database ใช้แค่ python
โดย mstsksmstsks อ 22 ต.ค. 2019 4:13 pm บอร์ด HTML CSS
7
86
พฤ 24 ต.ค. 2019 11:49 am โดย mindphp
สร้าง selectซ้อน2ชั้น โดยดึงค่าจาก database ใช้แค่ python
โดย May Saithan อ 22 ต.ค. 2019 4:07 pm บอร์ด Programming - C/C++ & java & Python
0
61
อ 22 ต.ค. 2019 4:07 pm โดย May Saithan
judspec.com ที่นี่ มีแบตเตอรี่โน๊ตบุ๊คดีๆ และราคาถูกมากมาย พร้อมจำหน่ายให้คุณแล้ว ทุกรุ่นทุกยี่ห้อ
โดย popeyebkk อ 22 ต.ค. 2019 4:00 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
18
อ 22 ต.ค. 2019 4:00 pm โดย popeyebkk
อยากทราบโปรแกรมสำหรับแคปภาพหน้าจอและปรับแต่งภาพหลังการแคป ใน windows นอกจากSnipping Toolหน่อยค่ะ
โดย nnamfon.26 อ 22 ต.ค. 2019 3:55 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
2
74
อ 22 ต.ค. 2019 4:18 pm โดย nnamfon.26
ต้องการที่จะเก็บข้อมูลลงฐานข้อมูลเป็นตัวเลขและ comme ต้องใช้ type อะไรดีครับ
โดย jamepiyawat อ 22 ต.ค. 2019 3:33 pm บอร์ด SQL - Database
3
74
อ 22 ต.ค. 2019 4:35 pm โดย thatsawan
อยากทราบวิธีการดึงปีปัจจุบันมาแสดง พร้อมกับดึงปีในอนาคตมารให้เลือก ล่วงหน้า อย่างน้อย 10 ใน php
โดย Ittichai_chupol อ 22 ต.ค. 2019 10:52 am บอร์ด Programming - PHP
1
67
อ 22 ต.ค. 2019 11:46 am โดย mindphp
อัพเดทความคืบหน้า / Progress - ThaiVI
โดย mindphp พ 10 ต.ค. 2018 3:49 am บอร์ด ThaiVI (Main)
391
2680
อ 22 ต.ค. 2019 8:13 pm โดย aninthana