--- код изменен ---
Предположим, у меня есть интерфейс и два класса, один из которых расширяет другой:
interface EncryptionModule {
public function setup();
public function encrypt($originalString);
public function decrypt($encryptedString);
}
class GeneralOneWayHashingModule {
public static $encryptionType = ALG_TYPE_HASH_FUNCTION;
protected $salt;
public function setSalt($salt) {
$this->salt = $salt;
}
public function decrypt($encryptedString) {
throw new Exception(__CLASS__ . ' ' . __LINE__ . ': cannot reverse an hash function ');
}
}
class BCryptHashingModule extends GeneralOneWayHashingModule implements GeneralOneWayHashingModule {
protected $cost;
public function setup() {
$this->cost = 10;
}
public function setCost($cost) {
$this->cost = $cost;
}
public function encrypt($originalString) {
return crypt($originalString, '$2a$' . str_pad($this->cost, 2, '0', STR_PAD_LEFT) . '$' . $this->salt);
}
}
Интересно, какой из двух классов должен реализовывать интерфейс EncryptionModule ... расширяющий (это мой выбор)? Оба класса, возможно, с GeneralOneWayHashingModule, объявленным как абстрактный и реализующим все функции, объявленные в EncryptionModule? Только расширенный?
Спасибо.