php类扩展方法vs静态方法,哪一个更好

时间:2010-12-21 08:35:20

标签: php class static extend

Approch 1:

class Storage extends SaeStorage {
public function save($data,$name){
    if (! $this->write ( ST_DOMAIN, $name, $data )){
        $error_message =    $this->errmsg();
        $result['error'] = $error_message;
        return $result;
    }else{
        $url = $this->getUrl ( ST_DOMAIN, $name );
        return $url;
    }   
}

}

方法2:

class Storage  {
public static  function save($data,$name){
    $SaeStorage = new SaeStorage();
    if (! $SaeStorage->write ( ST_DOMAIN, $name, $data )){
        $error_message =    $this->errmsg();
        $result['error'] = $error_message;
        return $result;
    }else{
        $url = $SaeStorage->getUrl ( ST_DOMAIN, $name );
        return $url;
    }   
}

}

4 个答案:

答案 0 :(得分:2)

我建议使用依赖注入模式。 Here是示例

答案 1 :(得分:0)

如果要在整个Storage类中使用SaeStorage类,那么方法1更有意义。每次要在扩展类中使用方法或属性时,它都可以节省您实例化新对象的时间。

答案 2 :(得分:0)

这真是一个设计问题。这两种方法都很好,取决于您的需求。

如果你想要存储中的所有SaeStorage功能,第一个更好,如果你不需要它,第二个只在save方法中。

无论如何,我建议在这里使用第一个,因为你也可以在使用SaeStorage的地方使用它。

答案 3 :(得分:0)

取决于你的意思更好。由于两种方法之间的性能差异非常小(如果有的话),并且可以忽略,我保持性能不容置疑。

那么这完全是一个设计问题。你需要找到答案的是:

  1. 您是否希望您的客户使用存储无缝替换SaeStorage,而SaeStorage是一种特殊类型的存储?如果是,那么否则不要延长。
  2. SaeStorage只是一种行为吗?例如,存储是一种存储设备,它们保存的方式各不相同。 SaeStorage只是你拯救事物的方式之一。然后使用第二种方法,这是一种strategy pattern
  3. 即使SaeStorage是特殊存储,您也可能希望使用策略模式将行为与接口分离。