php类扩展方法与静态方法,哪一种更好

php类扩展方法与静态方法,哪一种更好,php,class,static,extend,Php,Class,Static,Extend,方法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;

方法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;
    }   
}

}

如果要在整个存储类中使用SaeStorage类,那么方法1更有意义。每当您想在扩展类中使用方法或属性时,就不必实例化新对象。

我建议使用依赖注入模式。
示例是否真的是一个设计问题。这两种方法都很好,取决于您的需要

如果您想在存储中使用所有SaeStorage功能,第一个更好,如果您不需要,第二个更好,只有在save方法中


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

取决于你所说的更好是什么意思。我不想让性能受到质疑,因为这两种方法之间的性能差异非常小(如果有的话),可以忽略

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

  • 您是否希望您的客户端无缝地用存储替换SaeStorage,而SaeStorage是一种特殊类型的存储?如果是,则扩展,否则不扩展
  • 暴怒只是一种行为吗?例如,存储是一种存储设备,它们保存东西的方式各不相同。SaeStorage只是你保存东西的方法之一。然后使用第二种方法,这是一种
  • 即使SaeStorage是一种特殊的存储,您也可能希望使用策略模式将行为与接口解耦

  • SaeStorage是sae提供的一个类(如gae,但lamp),对于资源存储,我想在自定义类中隐藏这个SaeStorage,因此如果需要,可以很容易地将其更改为其他方法。在这种情况下,依赖项注入模式听起来不是一个好方法