2014-11-05 5 views
3

this StackOverflow question에서 은 (PHP에서) static::이 어디인지를 알게되었습니다. 한 클래스 내에서 많은 수의 상수를 정의 할 때 하위 클래스의 해당 상수를 재정 의하여 기본 "동작"을 변경하려면 static::을 사용해야하므로 상수를 참조하는 부모 클래스의 메서드, 상수 "오버라이드". 내가, 내가 어디 static::이없는 상수를 사용하는 클래스의 확장을 제한하기 위해 나타납니다 나는 거의 self:: 이후 self::을 사용하지 않는 점에 광범위하게 static::을 사용하기 시작했다 원래의 질문을 이후 2 년 동안static :: versus self :: - 단점이 있습니까?

이 제한.

내가하지 않더라도 현재이 상수는 자식 클래스에서 재정의 될 예정, 나는 단지의 경우, static::을 사용하게 - 그래서 나는 한 무리 할 필요가 없습니다 검색 및 바꾸기 나중에, 그것이 나온다면 나는 클래스를 확장하고 상수를 오버라이드하고 싶을 것이다.

그러나 다른 사람의 코드에서 I 은 드물다static::을 참조하십시오. 2012 년까지 그 존재를 알지 못했습니다. 그렇다면 self:: 대신에 static::을 사용하는 것이 일반적으로 아닌 이유는 무엇입니까?

내 질문에, 다음과 같습니다있다 self::에 반대 명백한 , 클래스 상수로 다스 려에 대한 static::을 사용하여을 단점? 내가 여기에 총체적인 반 패턴을 사용한다고 유죄?

답변

0

실제로 필요한 용도에 따라 다릅니다. 호출하는 클래스의 상수에 액세스해야하는 경우 self을 사용하십시오. 늦은 정적 바인딩이 필요하면 static을 사용하십시오.

공연의 관점에서 보면 selfstatic은 꽤 비슷합니다.

또한 광범위한 오버라이드/상속과 결합 된 정적 사용은 좋은 생각이 아닙니다.

귀하의 질문에 대한 직접적인 대답을 위해, 나는 항상 static의 사용을 테스트 목적으로 선호합니다 (현재 PHPUnit 4는 정적 방법 조롱을위한 지원을 제거했습니다).

+1

답해 주셔서 감사합니다! 왜 "정적 사용"이 좋은 아이디어가 아닌가? 설명 해주십시오. 또한 테스트 목적으로 정적 인 것이 바람직한 이유는 무엇입니까? –

+0

이 주제에 대한 유용한 정보가 많이 있습니다. http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/ – dynamic