บังเอินมีคนมาถาม เลยโพสต์เรื่อง php สักหน่อยแล้วกัน(ทั้งๆที่นั่งทำ CSS + Javascript อยู่แท้ๆ – -*)
บทความนี้จะกล่าวถึง เรื่องของการเขียน PHP แบบ OOP และแน่นอนอยู่แล้วว่า OOP ต้องมี Class มาเกี่ยวข้อง และก็มีเรื่องที่ควรจะรู้อยู่พอประมาณ อย่างเช่น พวก Magic Method , ระดับ การมองเห็น (Visibility)
ระดับการมองเห็น (Visibility)
สำหรับใครที่ไม่เข้าใจว่า เจ้า private function,public function ,protected function คืออะไร มันก็คือระดับการมองของ Object ใน php แหละครับ หมายความว่า หาก เราเขียน Class ขึ้นมาอันนึงแล้ว ก็เปรียบมันเป็น….เอ่อ.. เครื่องถ่ายเอกสารก็แล้วครับ ที่ใส่ inputเข้าไป แล้วต้องการ output ให้มา ซึ่งไม่ต้องไปรู้ข้างในมันเลยว่าจะทำงานยังไง ขอแค่ใส่กระดาษเข้าแล้วออกมาเป็นกระดาษอีกแผ่นก็พอแล้ว
แล้วทีนี้ Class ของ PHP ก็เช่นกันครับในเมื่อวัตถุประสงค์ของการเขียนแบบ OOP คือให้อ่านโค๊ดง่าย และง่ายที่จะพัตนาต่อในภายหลัง ซึ่งบางที Class ที่เราเขียนไว้ เราต้องการนำมันมาใช้ร่วมกับ Projectใหม่ ซึ่งมีลักษณะคล้ายๆของเก่า เราก็แค่ สร้าง Class ใหม่มา Extends Classเก่า ซึ่งตรงนี้แหละครับจะเกี่ยวกับระดับการมองเห็น ซึ่ง ระดับการมองเห็นจะเป็น 3 ระดับ คือ
Public
ระดับการมองเห็น แบบ public คือ public function หรือว่า public var จะสามารถใช้ได้ทั่วไป ไม่ว่าภายในหรือภายนอก Class อย่างเช่น public function test(){ } จะสามารถนำออกไปใช้นอก Class ได้ด้วย เช่น $test = new myClass(); $test->test(); //public method สามารถทำได้
Private
แบบ private จะไม่สามารถนำออกไปใช้นอก Class ได้ เราสามารถใช้ได้เฉพาะ ใน class เท่านั้น เช่น
class Example{ //.. private function test() { return true; } public function getTest() { return $this->test(); } //.. }แต่หากเอาไปใช้เหมือน ตอนแรก จะเน่าขึ้นมาทันที $example = new Example(); $example->test(); << แบบนี้จะ Error
protected
protect method : จะคล้ายๆกับ private method แต่ว่าสามารถนำไป extends แล้ว override ได้ด้วย (private จะไม่ได้)
ยังมีอีกอย่างที่ควรรู้คือ static method
static method
static method จะเขียนในประมาณเช่น public static function test(){ } ซึ่ง การใช้ static (ไม่ว่า static function หรือว่า static var) จะทำให้ ส่วนนั้น (ไม่ว่า method หรือ property) ทำงานได้แบบ static คือไม่เปลี่ยนค่าไปตามที่ Class ทำงาน แล้วระบบการทำงานเหมือนจะแยกกัน ตัวอย่างเช่น
class Example{
//..
static var $testvar;
public static function test(){
return true;
}
//..
}
คือเหมือนกับ เอา function ทั่วไปใส่ไว้ใน Class อีก ส่วนวิธีการเรียกใช้งาน ก็ต่างจากการดรียก method คือ ต้องเรียกแบบ Example::test(); (ชื่อคลาส::static_method) และก็ Example::$testvar;
__Magic Method
หลายๆคนคงสงสัยว่าทำไมมีพวก __construct() อยู่ใน class ด้วย แต่การสงสัยไม่ใช่ผิด มันทำให้รู้มากขึ้น!
สำหรับ __construct นี้เขาเรียกว่า magic method เป็นเมธอด มหัจรรย์(บร๊ะ! -*-) เป็น เมธอดพิเศษ ที่ php สร้างไว้ เพื่อทำอะไร พิเศษๆ สรุปว่ามัน พิเศษมาตั้งแต่ งั้นเราก็อย่าไปรู้มันเลย “เฮ้ย อะไรจะง่ายขนาดนั้น” ฮ่าๆ แต่ก็จริงอย่างที่บอกครับ ผมจะยกตัวอย่างการใช้งานเล็กๆน้อยๆ สำหรับ เมธอดพวกนี้ เช่น
__construct : จะใช้เป็น constructor แทน function ชื่อClass(){ } ได้ เราก็จะใช้ function __construct() แทน
__destruct :: เมธอดนี้จะถูกเรียกเมื่อ Class โดนทำลายลง (ส่วนใหญ่จะเป็นตอน จบ program)
__toString :: อันนี้ตามชื่อเลยครับ method นี้จะถูกเรียก เมื่อมีการ echo Object ของเรา ( $test = new Test(); echo $test; //__toString() จะถูกเรียกตรงนี้ และแน่นอนว่า _toString ต้องมีค่า return กลับไปเป็น (string) )
อ้อ มีอีกอย่างที่ควร รู้ คือ ตัวแปร $this ที่ใช้ใน Class ของเรา การเรียก เมธอดของตัวมันเองจะ $this เรียก ไม่ใช่ว่าจะเรียกได้เหมือน ฟังชั่นปกติ ส่วนแบบ static จะใช้ self::static_method();
Useful Link
http://php.net/manual/en/language.oop5.magic.php :: ทำหรับ magic method
http://php.net/manual/en/language.oop5.visibility.php :: สำหรับระดับารมองเห็นครับ
http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php :: static , constant
เขียนไม่ดียังไงก็บอกด้วยนะครับผมเขียนตามความเข้าใจของผมเองอ่าครับ T^T ไม่มีความรู้ลึกอะไร อ่านจากหนังสือ + เปิดลองทำตามเว็บเอา
มาแล้ว ๆ ซับแรก
ขอบคุณครับสำหรับข้อมูล
กำลังหาพอดี ขอบคุณครับเป็นประโยชน์มากครับ
เขียนดีครับ ขออีกๆ ชอบหล๊ายหลาย