我正在研究缓存类,我希望能够设置和获取来自5种不同存储介质的缓存项目。 Memcache,APC缓存,文件缓存,会话,cookie。也许即使是第六名(数据库可以添加为第六名)。PHP会加载页面中的所有文件引用吗?
我的目标是使其足够灵活,以便将来可以在很多项目中轻松使用它(便携式)。我也希望能够通过调用1 set方法和1 get方法来设置/获取缓存项目。
下面是我已经开始的代码,这将允许我这样做。在我的开关块中,我不确定是否应该将该缓存类型的所有代码放在那里,或者是否调用其他方法,或者让每个开关块项目都调用一个完整的新类/对象。
我在想,如果我把每个缓存系统放在它自己的类文件中,那么如果在页面上只使用了几个缓存类型,那么我的自动插入将不需要为此载入尽可能多的代码。我不确定,使用自动加载为我的类文件,它仍然会加载下面的代码中的6个不同的类文件,或者它只会加载交换机需要的文件。例如,如果一个页面只使用会话缓存,我的下面的交换机只会加载会话类文件,或者PHP会自动加载所有文件?这很难测试,因为如果我把一些东西放在我的代码中进行测试,那么它肯定会加载所有的文件。
请给我建议,我不想使用框架,我试图学习不使用现有的框架。
/**
* 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":
echo "Cache item to memcache";
break;
case "apc":
echo "Cache item to APC";
break;
case "session":
echo "Cache item to Sessions";
foreach ($keys as $key => $val)
{
// Set the key
$_SESSION[$key] = $val;
}
break;
case "cookie":
echo "Cache item to Cookie";
break;
case "file":
echo "Cache item to File";
break;
}
}
ok听起来不错! – JasonDavis 2010-01-19 23:47:59
您可以测试它的一种方法是将某种输出放入'__autoload'函数中,以便每次调用它时都可以跟踪。 – nickf 2010-01-19 23:48:48
是的我只是不知道它是否会加载文件,只是我把它称为它。我仍然非常了解类和对象。也许我应该将这段代码放在主缓存类中,然后像扩展此类的memcache类一样 – JasonDavis 2010-01-19 23:56:02