PHP bir sayfada ve üzerinde bir tek yöntem çok zaman çağırmak için kötü mü?

1 Cevap php

PHP 5 farklı önbelleğe sınıflar (memcache, apc, oturumda, dosya, çerez) gibi bir singleton yöntem oluşturmak eğer

Sonra (password benim set javascipt bir ana önbellek sınıf var) ve uygun önbelleğe alma sınıfa () yöntemleri olsun. Şimdi tüm aynı sayfada oturumu, çerez, memcache ve dosya önbelleği kullanmak gerekir Diyelim ki. Benim ana önbellek sınıfı sonra singleton'ununu kullanarak bu önbellek türlerinin her biri için yeni bir örneği 1 defa oluşturmanız gerekir.

SO Sonra, bir sayfa benim tekiz yöntemleri defalarca aramak için ben 1 sayfada önbelleğe 30 farklı çağrıları almak / ayarlamak için olsaydı, o birçok kez tekiz yöntemini çağırır gerekir.

Bir sayfada ve üzerinde benim singleton'ununu arama tutmak için çok iyi kötü bir uygulama olup olmadığını merak ediyorum?


UPDATE

Aşağıda Ben size ben bir sayfada 40 kez MEMCACHE şey eklemek olsaydı, bu ym memcache sınıf için tekiz yöntemini çağırır ... yapmaya çalışıyorum ne daha iyi bir örnek alabilirsiniz başladı bazı kod 40 kez

/**
* Set a key/value to cache system.
*
* @param   string        type of cache to store with
* @param   string|array  keys, or array of values
* @param   mixed         value (if keys is not an array)
* @return  void
*/  
public function set($type, $keys, $value = FALSE, $options_arr)
{
    if (empty($keys))
        return FALSE;

    if ( ! is_array($keys))
    {
        $keys = array($keys => $val);
    }

    // Pick our Cache system to use
    switch ($type) {
        case "memcache":
            // Cache item to memcache
            $this->memcache = Memcache::getInstance();
            $this->memcache->get($keys, $value, $options);
            break;

        case "apc":
            // Cache item to APC
            $this->apc = APC::getInstance();
            $this->apc->get($keys, $value, $options);
            break;

        case "session":
            // Cache item to Sessions
            foreach ($keys as $key => $val)
            {
                // Set the key
                $_SESSION[$key] = $val;
            }
            break;

        case "cookie":
            // Cache item to Cookie
            break;

        case "file":
            // Cache item to File
            break;
    }

}

1 Cevap

Genellikle daha kötü bir uygulama olarak kabul singletons kullanarak bir konuşma (one reason is they make unit-testing harder, if not impossible).

Bu göstermek için: Symfony ve Zend Framework, hem bir sonraki ana sürümü (2.0) hem çerçeveler gibi birçok singletons onlar gibi kaldırmak için çalışıyoruz.


That being said, singletons should be used when it makes sense to have one and only one instance of a given class ; does it make sense in your case ? Up to you to decide ;-)

Tekrar ve üzerinde singleton'ununu aramak istemiyorsanız, bir yerel değişkenin saklamak isteyebilirsiniz - Ben (maybe "premature" / "useless") optimizasyonu bazı tür olarak görülebilir varsayalım.

Örneğin, bu kod tür sahip yerine ise:

Singleton::getInstance()->method();
Singleton::getInstance()->method();
Singleton::getInstance()->method();

Sen olurdu:

$s = Singleton::getInstance();
$s->method();
$s->method();
$s->method();

Emin olsa da, bu elde edersiniz değil ne kadar ...