2/12/58

Design Patterns: PHP Singleton

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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น