สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

การเขียน OOP ด้วย PHP เพื่อติดต่อฐานข้อมูล Mysql เบี้องต้น

Class เริ่มต้นที่เราจะเขียน คือ Class connection

class connection
{     
     
     function openConnection() // เปิดการเชื่อมต่อกับ MySQL
     {
        mysql_connect('localhost', 'username', 'password') or die('Could not connect: ' . mysql_error());        
     }
     
     function closeConnection() // ปิดการเชื่อมต่อกับ MySQL

     {
        mysql_close();        
     }
     
     function select_onlineshop_db() // เลือกฐานข้อมูลที่ต้องการเชื่อมต่อ
     {
        mysql_select_db("onlineshop") or die("Cannot select database.");
        mysql_query("SET character_set_results='utf8'");
        mysql_query("SET character_set_client='utf8'");
        mysql_query("SET character_set_connection='utf8'");
        mysql_query("collation_connection = utf8_general_ci");
        mysql_query("collation_database = utf8_general_ci");
        mysql_query("collation_server = utf8_general_ci");
     }               
}

Class เริ่มแรกสุดที่เราเขียนขึ้นเพื่อใช้ติดต่อกับฐานข้อมูลที่เราสร้างขึ้นในฉบับก่อนนะครับ

เวลาเราเรียกใช้งานใน code PHP จะเป็น ดังนี้

   $connObj = new connection(); // สร้าง instance ของ object ของ class connection บรรทัดนี้ตัวแปร $connObj คือ สิ่งที่เรียกว่า instance ของ object ของ class connection

   $connObj->openConnection(); // เมื่อ $connObj คือ instance ของ object ของ class connection ดังนั้นตัวแปรนี้สามารถเรียกใช้งานฟังก์ชั่นที่ประกาศภายใน class connection ได้ บรรทัดนี้จึงเป็นคำสั่งเปิดเชื่อมต่อกับ MySQL username กับ password ที่ ฟังก์ชั่น ตอนนี้ให้ใช้ username : root และ password : ****** ที่ตั้งตอน install appserv ไปก่อนครับ เนื่องจากใช้เป็นตัวพัฒนา แต่ถ้าหาก เอาขึ้นจริงๆควรสร้าง user ที่ฐานข้อมูลใหม่อีก user หนึ่งครับ ซึ่งจะอธิบายในภายหลัง

   $connObj->select_onlineshop_db(); // เมื่อเชื่อมต่อแล้ว คำสั่งนี้เป็นคำสั่งเลือกฐานข้อมูลที่เราต้องใช้งานซึ่งก็คือ ฐานข้อมูลชื่อ onlineshop ที่เราสร้างไว้ที่ฉบับก่อนนะครับ

คำสั่ง 3 คำสั่งข้างต้นนี้ใช้ในการเปิดการเชื่อมต่อกับฐานข้อมูลที่เราสร้างไว้

นำโค้ดข้างต้นนี้ใส่ไว้ในไฟล์ชื่อ connectionClass.php ใส่ไว้ใน folder สร้างใหม่ชื่อ class ภายใต้ folder BJDev จากนั้นสร้างไฟล์ชื่อ allClass.php ภายในไฟล์นี้จะเป็นที่บรรจุรวมของ class ทั้งหมดที่เราจะสร้างต่อไปโดยมี code ดังนี้

allClass.php
   require "connectionClass.php";
?> จากนั้นกลับมาที่ไฟล์ session.php ยังจำกันได้นะครับให้ใส่ code เพิ่มเติมลงไป

ob_start(); 
session_start();
require "class/allClass.php"; // บรรทัดที่เพิ่มลงไป

ทีนี้ที่ index.php ที่เป็นหน้าแรกของร้านค้าก็จะมี class connection ไว้ใช้งานแล้วครับ สังเกตการต่อยอดของไฟล์ครับ

connectionClass.php -> allClass.php -> session.php -> index.php โดยใช้คำสั่ง require จะได้กระจ่างขึ้นครับ

คำถามว่าทำไมต้องทำแบบนี้? 
ยกตัวอย่าง สมมติว่าเรา สร้างไฟล์ตระกร้าสินค้ามา อีก 1 ไฟล์ชื่อ cart.php
เราจะทำอย่างไรให้ cart.php มี class connection ที่เชื่อมต่อ DB มาใช้งานอีกในไฟล์นี้ เราแค่
require "session.php" ลงไปที่ cart.php เพียงคำสั่งเดียวก็ใช้ได้เลย ไม่จำเป็นต้องมาเขียนซ้ำอีกใน cart.phpถ้าต้องการแก้คำสั่ง ใน connection class เราก็แก้ที่เดียวที่ connectionClass.php ไม่ต้องตามไปแก้ทุกไฟล์ที่เรียกใช้มัน แต่ก็เป็นรูปแบบส่วนตัวของแต่ละคน ด้วยครับ ไม่เหมือนกัน 100 คนเขียนโปรแกรมออกมาได้ 100 รูปแบบ ไม่ซ้ำกันขึ้นอยู่กับแนวคิดและ algorithm ส่วนบุคคลครับ

มาถึงตรงนี้ขอเกริ่นเรื่องของ OOP - object oriented programming หรือภาษาไทยเรียกว่า การเขียนโปรแกรมเชิงวัตถุ จำไว้ 3 คุณสมบัติหลักของ OOP
1. encapsulation
2. inheritance
3. polymorphism

3 ตัวนี้เป็น แกนหลักของการเขียนโปรแกรมแบบ OOP ครับ

encapsulation - บรรจุอยู่ภายใน? ลักษณะที่บรรจุตัวแปรและฟังก์ชั่นต่างๆไว้ภายใน class และบังคับการใช้งานตัวแปรและฟังก์ชั่นนั้นๆภายในให้เป็นไปอย่างถูกต้อง เทียบกับ connection class ที่เขียนไว้ข้างต้นครับ สิ่งที่บรรจุอยู่ภายใน คือ ทั้ง 3 function ที่อยู่ภายใน class ในที่นี้ยังไม่มีการสร้างตัวแปรครับ

ยกตัวอย่างเทียบกับ รถยนต์ ตัวอย่างนี้ผมได้มาจากรุ่นพี่ของผมคนหนึ่งครับเห็นว่ามันเข้าใจง่ายดี
เราจะเขียนโปรแกรมการทำงานของรถยนต์ครับ
1. class รถยนต์ มี function ขับรถ อยู่ 1 function บรรจุอยู่
2. class รถยนต์เกียร์ธรรมดา มี function เข้าเกียร์กระปุก 1 function บรรจุอยู่
3. class รถยนต์เกียร์ออโต้ มี function เข้าเกียร์ออโต้ อยู่ 1 function บรรจุอยู่
ลักษณะการบังคับใช้งานให้ถูกต้องเป็น ดังนี้ ครับ
class รถยนต์เกียร์ธรรมดา จะไม่สามารถใช้ function เกียร์ออโต้ ได้
class รถยนต์เกียร์ออโต้ จะไม่สามารถใช้ function เกียร์ธรรมดา ได้
เริ่มจะเข้าใจคำนี้นะครับ encapsulation

inheritance - คุณสมบัติการสืบทอดจาก class แม่สู่ class ลูก ยกตัวอย่างเดิมครับ

1. class รถยนต์ เป็น Class แม่
2. class รถยนต์เกียร์ธรรมดา เป็น Class ลูก
3. class รถยนต์เกียร์ออโต้ เป็น Class ลูก

1 --> 2
1 --> 3

Class ลูกทั้ง 2 สามารถใช้ function ของ class แม่ได้ซึ่งก็คือ ทั้งเกียร์กระปุกและเกียร์ออโต้สามารถใช้ function ขับรถซึ่งมีอยู่ใน class แม่ได้ นี่เป็นคุณสมบัติสืบทอด

polymorphism - คุณสมบัติ หลายรูปร่าง poly - หลากหลาย, morphism - รูปร่าง อธิบายยาก ยกตัวอย่างเลยครับ เหมือนเดิม

1. class รถยนต์ เป็น Class แม่
2. class รถยนต์เกียร์ธรรมดา เป็น Class ลูก
3. class รถยนต์เกียร์ออโต้ เป็น Class ลูก

จาก class แม่รถยนต์ แยกออกมาเป็น รถยนต์เกียร์ออโต้ รถยนต์เกียร์ธรรมดา ต่อไปอาจจะมีเพิ่มเป็น รถยนต์เกียร์คอมพิวเตอร์ รถยนต์เกียร์ดิจิตอล etc... หลากหลายไม๊ครับ ประโยชน์ของมัน คือ function ขับรถต้องเขียนใหม่ไหม ? ไม่จำเป็นเลยถึงจะสร้าง class ใหม่ๆออกมามากมายแค่ไหน นี่แหละที่เรียกว่า polymorphism ครับ

ที่มา : http://www.webub.com/