在PHP页面上多次反复调用单例方法是否不好?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在PHP页面上多次反复调用单例方法是否不好?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2164字,纯文字阅读大概需要4分钟。
内容图文
在PHP中,如果我为5种不同的缓存类(memcache,apc,session,file,cookie)创建单例方法
然后,我有一个主要的缓存类,该类基本上将set()和get()方法路由到适当的缓存类.现在说我需要在同一页面上使用会话,cookie,内存缓存和文件缓存.然后,我的主缓存类需要使用单例为这些缓存类型中的每一种创建一个新实例1次.
因此,我将需要在页面上多次调用我的单例方法,如果我要在一页上设置/获取30个不同的对缓存的调用,它将多次调用单例方法.
我想知道在页面上一遍又一遍地打电话给我的单身人士是不好的做法还是不是很好?
更新
下面是我已经开始的一些代码,在其中您可以得到我正在尝试做的更好的示例…如果我要在页面上将内容添加到memcache 40次,它将为ym memcache类调用单例方法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;
}
}
解决方法:
一般来说,越来越多的人认为使用单例是不好的做法(原因之一是,即使不是没有可能,它们也会使单元测试更加困难).
为了说明这一点:symfony和Zend Framework的下一个主要版本(2.0)都试图从两个框架中删除尽可能多的单例.
话虽如此,当一个给定类只有一个实例并且一个实例只有一个有意义时,应该使用单例.您的情况有意义吗?由您决定;-)
如果您不想一遍又一遍地调用单身人士,则可能希望将其存储在局部变量中-我想它可能被视为某种(也许是“过早的” /“无用的”)优化.
例如,如果具有这种代码,则:
Singleton::getInstance()->method();
Singleton::getInstance()->method();
Singleton::getInstance()->method();
您将拥有:
$s = Singleton::getInstance();
$s->method();
$s->method();
$s->method();
不过,不确定从中获得多少收益…
内容总结
以上是互联网集市为您收集整理的在PHP页面上多次反复调用单例方法是否不好?全部内容,希望文章能够帮你解决在PHP页面上多次反复调用单例方法是否不好?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。