Singleton პატერნი – PHP4 და PHP5

შესაძლებელია თუ არა ამ საჭირო პატერნის რეალიზაცია PHP4 – ში? მიუხედავად იმისა რომ უმრავი რამ არის ნათქვამი PHP-ს ამ ვერსიის არასრულფასოვან ობიექტზე ორიენტირებულ შესაძლებლობებზე – ეს შესაძლებელია თუმცა გარკვეულწილად ეს არის ხელოვნური და შედარებით რთული გზა ვიდრე PHP5-სა და Java-ში. (დეტალურად ამ პატერნის შესახებ შეგიძლიათ წაიკითხოთ ამ პოსტში).

რითია ეს სირთულე გამოწვეული ეს სირთულე PHP4 – ში? ამის რამდენიმე მიზეზია რომელსაც ჩამოვთვლილია ქვევით:

  1. არ არსებობს წვდომის მოდიფიკატორები(public, protected, private) კლასის ცვლადებისა და მეთოდებისათვის.
  2. არ არსებობს სტატიკური (static) კლასის ცვლადები.

სწორედ ზემოთაღნიშნული მიზეზები ღდის ამ პატერნის რეალიზაციას ხელოვნურს, თუმცა მისი გამოყენება მაინც შესაძლებელია.

განვიხილოთ მაგალითი:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Singleton {    
   
    //private constructor
    function Singleton() {}
   
    function &getInstance() {
       
        static $singleton = array();
       
        if (!$singleton) {
            $singleton[0] = &new Singleton();
        }

        return $singleton[0];

    }

}

თუმცა PH5 – სთვის საქმე გაცილებით უკეთ არის და მისი რეალიზაცია თითქმის იდენტურია Java-ს რეალიზაციისა.

მაგალითი PHP5 – სთვის:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Singleton {

    static private $instance = null;

    //private constructor
    private function __construct() { }

    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }

}

მოცემულ კოდში განსხვავებით პირველი მაგალითისგან თვალში გხვდება რამოდენიმე ახალი საკვანძო სიტყვა:

  1. static – გამოიყენება როგორც კლასის ცვლადის ასევე კლასის მეთოდთან.
  2. public, private – წვდომის მოდიფიკატორები რომლებიც მანამდე არ არსებობდა PHP – ში.
  3. _counstruct - PHP5 – ში კონსტრუქტორის სახელი (კლასის სახელი გამოყენება წინა ვერსიაში ავტომატურად გულისხმობდა რომე ეს ფუნქცია იყო კონსტრუქტორი)
  4. self – ეს საკვანძო სიტყვა გულისხმობს მიმდინარე კლასს, მხოლოდ სტატიკურ კონტექსტში.

ტეგები: ,

დატოვე კომენტარი:

ქართული კლავიატურა, ჩართვა/გამორთვა კლავიშით "~"