2010-01-19 50 views
0

我正在研究缓存类,我希望能够设置和获取来自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; 
    } 

} 

回答

2

自动加载仅在尝试引用不存在的类时才会发生。即,执行该行时。它不会通过文件解析来查找所有可能的类 - 严格按照需要进行分析。

+0

ok听起来不错! – JasonDavis 2010-01-19 23:47:59

+0

您可以测试它的一种方法是将某种输出放入'__autoload'函数中,以便每次调用它时都可以跟踪。 – nickf 2010-01-19 23:48:48

+0

是的我只是不知道它是否会加载文件,只是我把它称为它。我仍然非常了解类和对象。也许我应该将这段代码放在主缓存类中,然后像扩展此类的memcache类一样 – JasonDavis 2010-01-19 23:56:02