Каков наилучший шаблон для достижения этого поведения?
У меня есть много методов, скажем method_1 .. method_N, которые могут быть все параметризованы одним параметром, скажем, $ k.Я хотел бы, чтобы они были внутри класса в качестве статических методов, поэтому, конечно, я мог бы написать свой ComputationClass следующим образом:
class Computation {
static function method1( $k, $otherParams ) { ... }
static function method2( $k, $otherParams ) { ... }
static function method3( $k, $otherParams ) { ... }
}
Теперь, поскольку $ k принадлежит определенному диапазону значений, скажем {'dog',' cat ',' mouse '}, я хотел бы создать множество подклассов вычислений, по одному на каждое возможное значение.
class Computation_Dog extends Computation {
static function method1( $otherParams ) { parent::method1('dog', $otherParams); }
static function method2( $otherParams ) { parent::method2('dog', $otherParams); }
static function method3( $otherParams ) { parent::method3('dog', $otherParams); }
}
class Computation_Cat extends Computation { .. }
class Computation_Mouse extends Computation { .. }
Но это довольно уродливо и заставляет меня отказаться от преимуществнаследование: что произойдет, если я добавлю метод в вычисления?нужно отредактировать все подклассы .. Затем я ловко переключился на это:
abstract class Computation {
abstract static function getK();
static function method1($otherParams) { ... self::getK() .. }
static function method2($otherParams) { ... self::getK() .. }
static function method3($otherParams) { ... self::getK() .. }
}
class Computation_Dog extends Computation {
static function getK() { return 'dog'; }
}
Хорошая попытка, но она не работает, потому что статические методы, кажется, не запоминают стек наследования, и self ::getK () будет вызывать Computation :: getK () вместо Computation_Dog :: getK ().
Хорошо .. в надежде быть достаточно ясным ... как бы вы разработали такое поведение?PS: мне действительно нужны они как статические методы
Спасибо