php class extench Approch vs Static Approch, который лучше - PullRequest
0 голосов
/ 21 декабря 2010

Подход 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 ]

2 голосов
/ 21 декабря 2010

Я предлагаю использовать шаблон внедрения зависимостей. Здесь является примером

0 голосов
/ 21 декабря 2010

Зависит от того, что вы подразумеваете под лучше. Я не рассматриваю производительность, так как разница в производительности между двумя подходами будет очень минимальной (если вообще есть) и может быть проигнорирована.

Тогда это полностью вопрос дизайна. Вещи, на которые вам нужно найти ответы:

  1. Хотите ли вы, чтобы ваши клиенты без проблем заменяли SaeStorage на Storage, а SaeStorage - это особый тип Storage? Если да, то расширяйте, иначе не делайте.
  2. SaeStorage - это просто поведение? Например, Хранилище - это устройство хранения, и способы их сохранения различны. SaeStorage - это только один из способов сохранения вещей. Затем используйте второй подход, который является своего рода паттерном стратегии .
  3. Даже если SaeStorage является специальным хранилищем, вы можете использовать шаблон стратегии для отделения поведения от интерфейса.
0 голосов
/ 21 декабря 2010

Это действительно вопрос дизайна.Оба подхода хороши, зависит от ваших потребностей.

Первый вариант лучше, если вы хотите использовать все функции SaeStorage в хранилище, второй, если он вам не нужен, только в методе сохранения.

В любом случае, я предлагаю первый здесь, потому что вы можете использовать его в местах, где также используется SaeStorage.

0 голосов
/ 21 декабря 2010

Если вы собираетесь использовать класс SaeStorage в классе хранения, подход 1 имеет гораздо больший смысл. Это избавляет вас от необходимости создавать новый объект каждый раз, когда вы хотите использовать метод или свойство в расширенном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...