Design Patterns: PHP Singleton
บทความนี้เรามาดูตัวอย่างการใช้ Design Patterns มาใช้ในภาษา PHP โดยตัวอย่างนี้จะเป็นเรื่องของ Singletonในการออกแบบ web application นั้น ก็มักจะมีแนวทางในการออกแบบที่หลากหลายรูปแบบกันไป และมักจะมีการออกแบบให้มีการเข้าถึง instance ใน Class ไม่น้อยเช่นกัน เช่น เราต้องการจะเข้าถึง Object ที่เกี่ยวกับการติดต่อฐานข้อมูลหนึ่ง ๆ เราไม่จำเป็นจะต้องสร้าง Object ชนิดนี้ออกมามากมาย เพียงแค่ Object เดียวแล้วเวลาจะใช้ก็ทำการเรียก getInstance เอา Object นั้นออกมาใช้งานเพียงแค่นี้ก็พอแล้ว และก็มีอีกอย่างนั่นก็คือเราไม่จำเป็นต้องแก้ไขหรือไม่ให้ใครมาแก้ไข Object นี้ เราจะออกแบบยังไง The singleton pattern สามารถช่วยคุณได้ มาดูตัวอย่างง่าย ๆ กัน
<?php class Singleton { /** * @var Singleton The reference to *Singleton* instance of this class */ private static $instance; /** * Returns the *Singleton* instance of this class. * * @return Singleton The *Singleton* instance. */ public static function getInstance() { if (null === static::$instance) { static::$instance = new static(); } return static::$instance; } /** * Protected constructor to prevent creating a new instance of the * *Singleton* via the `new` operator from outside of this class. */ protected function __construct() { } /** * Private clone method to prevent cloning of the instance of the * *Singleton* instance. * * @return void */ private function __clone() { } /** * Private unserialize method to prevent unserializing of the *Singleton* * instance. * * @return void */ private function __wakeup() { } } class SingletonChild extends Singleton { } ?>
จากโค้ดจะเห็นว่าตัวแปรที่ต้องการจะ return นั้นจะต้องเป็น static เวลาจะใช้งานเราก็เรียก getInstance() เช่น Singleton::getInstance(); ในฟังก์ชันเราก็ทำการเช็คตัวแปรก่อนว่ามีค่าแล้วหรือเปล่า หรือมีคนเรียกแล้วหรือยัง ถ้ายังเราก็ทำการสร้างขึ้นมาแล้วเก็บไว้ในตัวแปรประจำ Class จากนั้นเมื่อทำการเรียกครั้งต่อไป เราจะทำการ return ตัวแปรเดิมที่เคยเรียกไปแล้ว
ดูเพิ่มเติมได้ที่
http://www.phptherightway.com/pages/Design-Patterns.html
https://en.wikipedia.org/wiki/Singleton_pattern
ไม่มีความคิดเห็น:
แสดงความคิดเห็น