Плохо ли много раз вызывать одноэлементный метод снова и снова на странице в PHP?
В PHP, если я создам одноэлементный метод для 5 различных классов кэширования (memcache, apc, сеанс, файл, cookie)
Затем у меня есть основной класс кэша, который в основном направляет мои методы set() и get() в соответствующий класс кэширования. Теперь предположим, что мне нужно использовать сеанс, файлы cookie, кэш памяти и кэш файлов на одной странице. Затем моему основному классу кэша потребуется создать новый экземпляр 1 раз для каждого из этих типов кэша с использованием одного элемента.
ПОЭТОМУ мне тогда понадобилось бы чтобы вызывать мои одноэлементные методы много раз на странице, если бы я установил/получил 30 различных вызовов кэша на 1 странице, он вызывал бы одноэлементный метод столько раз.
Мне интересно, является ли плохой практикой или не очень хорошей продолжать снова и снова вызывать мой синглтон на странице?
ОБНОВЛЕНИЕ
Ниже приведен некоторый код, который я запустил, в нем вы можете получить лучший пример того, что я пытаюсь сделать... Если бы я добавил что-то в memcache 40 раз на странице, это вызывал бы одноэлементный метод для класса memcache ym 40 раз
/**
* 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 answers
Вообще говоря, использование синглетов все больше и больше рассматривается как плохая практика (одна из причин заключается в том, что они усложняют модульное тестирование, если не делают его невозможным).
Чтобы проиллюстрировать это: как symfony, так и Zend Framework для своей следующей основной версии (2.0) пытаются удалить как можно больше синглетов из обеих платформ.
При этом, как говорится, синглеты следует использовать, когда имеет смысл иметь один и только один экземпляр данного класса; имеет ли это смысл в вашем случае? Решать вам;-)
Если вы не хотите вызывать свой синглтон снова и снова, вам может потребоваться сохранить его в локальной переменной - я полагаю, это может рассматриваться как своего рода (возможно, "преждевременная"/"бесполезная") оптимизация.
Например, вместо этого, если у вас есть такой код:
Singleton::getInstance()->method();
Singleton::getInstance()->method();
Singleton::getInstance()->method();
У вас было бы:
$s = Singleton::getInstance();
$s->method();
$s->method();
$s->method();
Хотя не уверен, сколько вы от этого выиграете...