이 동작을 수행하는 가장 좋은 패턴은 무엇입니까?PHP, 정적 메소드 및 상속 .. 유효한 패턴 검색
나는 하나의 매개 변수, 예를 들어 $ k로 모두 매개 변수화 할 수있는 method_1 .. method_N과 같은 많은 메소드가 있습니다. 나는이 같은 내 ComputationClass를 작성할 수 물론 그래서 내가 정적 메서드와 같은 클래스의 내부를하고 싶은 :
class Computation {
static function method1($k, $otherParams) { ... }
static function method2($k, $otherParams) { ... }
static function method3($k, $otherParams) { ... }
}
을 지금 $의 k는 값의 특정 범위에 속하기 때문에, { '개'라고, 'cat', 'mouse'}, 가능한 한 모든 값에 대해 하나씩 Computation의 여러 하위 클래스를 만들고 싶습니다.
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'; }
}
니스 시도하지만, 정적 메서드는 상속 스택을 기억하지 않는 것 때문에 작동하지 않습니다, 자기 :: getK을()는 Computation_Dog :: getK() 대신 Computation :: getK()를 호출합니다.
글쎄 .. 충분히 명확 해 지길 바래요. 어떻게이 행동을 고안하겠습니까? PS : 정말 내가 모든이 동작을 설계하지 않을 정적 메서드로
감사
대답 주셔서 감사합니다. 예, 당신이 무슨 말을 사실입니다 ...하지만, 내가 지정한대로, 나는 정적 메서드를 필요로 .. 그래, Calculating_Dog 클래스는 래퍼를 포함하는 단지 바보 같은 클래스입니다 ..하지만 내가이를 사용하여 가능한 솔루션을 추가 – user831634
을 원하는 것을 정확히 __call 정적 마법 방법입니다. 모든 정적 함수 호출을 클래스 자체에 존재하지 않는 함수로 재 지정할 수 있습니다. 이렇게하면 모든 함수 선언을 모든 래퍼 클래스에 복사 할 필요가 없습니다. – GolezTrol
다시 한 번 감사드립니다. __callStatic을 사용하면 좋은 트릭입니다. – user831634