在进行一个大网站开发时,我们会碰到这种情况(我们调用同样的方法名,但是想实现不同的效果。),为了解决这种情况可以使用抽象类来解决。
举个例子:在某个网站中涉及到缓存,首先一部分数据我想以缓存文件的形式保存到服务器上,而另一部分数据我只想是以key-value的形式保存到服务器上。
如果按平常的思路来解决问题:
1、定义生成缓存文件的类:
class FileCache(){
public function readCache(){
}
}
// 调用读取缓存文件的数据并得到结果
$read = new FileCache();
$read ->readCache();
2、定义缓存类
class MemCache(){
public function readCache(){
}
}
//调用读取缓存文件的数据并得到结果
$read = new MemCache();
$read ->readCache();
总结:我们在每次调用不同的方法时,都要对应的实例化相应类。
3、我们定义一个抽象类
abstract class Cache(){
private static $cacheArr;
//利用反射进行类的实例化
static function creatCache($name){
$cacheClass = new ReflectionClass ($name );
self::$cacheArr[$name] = $cacheClass->newInstance();
return self::$cacheArr[$name];
}
//定义抽象方法,没有实体
abstract function readCache($key, $group = null, $outTime = 0);
class FileCache extends Cache(){
//方法实体
public function readCache(){
}
}
class MemCache extends Cache(){
//方法实体
public function readCache(){
}
}
//这样我们调用时
$name = 'File';
$cacheobj = Cache::creatCache($name);
$cacheobj->readCache('userdata');
总结:这样会省略大部分的代码,提高了代码的重用性