PHP tekiz desen bazı karışıklıkların

2 Cevap php

Benim takım ben bu tarzı gibi kaynak sınıfı yazmak için söylendi:

class MemcacheService
{
    private static $instance = null;

    private function __construct()
    {

    }

    public static function getInstance($fortest = false)
    {
        if (self::$instance == null)
        {
            self::$instance = new Memcached();

            if ($fortest)
            {
                self::$instance->addServer(MEMTEST_HOST, MEMTEST_PORT);
            }
            else
            {

                self::$instance->addServer(MEM_HOST, MEM_PORT);
            }
        }

        return self::$instance;
    }
}

Ama PHP kaynak kolları üzerinde bir istekten sonra yayımlanan ve yine her zaman başlatılır olacağını düşünüyorum. İşte MemcacheService::getInstance() tüm tekiz desen denilen olamaz ki new Memcached() tamamen eşit olduğu anlamına gelir. Yanılıyorsam lütfen beni düzeltin.

Selamlar

2 Cevap

Komut sona erdiğinde, (ancak aşağıya bakınız dosya kolları, veritabanı bağlantıları) PHP en kaynaklarını yayınlayacak haklısın. Bir komut vadede içinde aynı örneğe birden çok kez erişen ve çevresinde referans geçen değil, ancak daha sonra bu küresel kullanarak temelde eşdeğer olsa, "memcache bağlantı örneği" sekmeleri tutmak makul bir yoludur uzun vadede.

(* Bu tür kalıcı veritabanı bağlantıları gibi bazı bağlantılar, aslında gibi serbest olmayacak ve böyle bir bağlantısı istemek için bir sonraki komut daha önce açılmış bir geri verilebilir)

Hayır, bu doğru bir singleton kalıptır. Everytime self::$instance, null ise getInstance(), bu kontrol edecektir diyoruz.

if(self::$instance == null)

Null ise, o zaman self::$instance null yapar Memcached, yeni bir örneğini oluşturur, bu nedenle çağrılan dahaki sefere, o aynı örneği dönecektir.

self::$instance = new Memcached();