2012-06-15 2 views
5

클래스의 인스턴스를 사용하여 나쁜 습관으로 간주되는 정적 메서드에 액세스하고 있습니까?클래스의 인스턴스를 사용하여 나쁜 습관으로 간주되는 정적 메서드에 액세스하고 있습니까?

e.e.

$model = new MyClass(); 
$options = MyClass::getOptions(); 

$model = new MyClass(); 
$options = $model::getOptions(); 

($model은 어느 경우에 인스턴스화, 난 그냥 하나 개의 방법이 다른 것이 바람직합니다 경우 궁금하네요.)

+0

두 번째 구문이 잘못되었습니다 : s –

+0

@SiGanteng IDE가 불평하지 않고 실행 중입니다 ... – bcmcfc

+0

ok, 내 잘못, 미안 해요. –

답변

4

전통적으로 첫 번째 방법 (클래스를 지정을 이름 자체)은 Java와 같은 다른 언어와 더 유사합니다.

두 번째 것은 PHP (afaik)에서만 고유합니다. :: 연산자가 인스턴스와 정적 속성 모두에 마침표가 사용되는 Java와 달리 표현식을 명확히하기 때문에 작동합니다.

두 번째 옵션을 사용하면 성능에 미치는 영향은 확실하지 않지만 개인적인 취향/코딩 표준에 달려 있다고 생각합니다. 인스턴스의 유형은 두 번째 옵션 (때로는 클래스 이름이 꽤 큰 수 있습니다)에 대한 이동하는 것이 더 쉬울 수 있습니다 주변의 코드에서 즉시 명확 경우

결론

; 하지만 그렇지 않다면 가장 명확한 첫 번째 옵션을 사용하십시오.

3

그게 달려 있다고 생각합니다. 인스턴스화가 필요없는 코드를 사용하여 많은 행복한 해에서 정적 메서드를 행복하게 사용할 수 있지만 어느 날 (다른 곳으로가는) 호출을 다른 자손 클래스로 다시 라우팅해야하므로 간단한 검색 및 바꾸기 호출 하지 않을 것이다.) 준비된 물건을 가지고가는 것이 더 안전한 길이라고 생각합니다.

1

(5.3+ 만 PHP에서 사용할 수)

$className = 'MyClass'; 
$className::classyMethod1(); 
$className::classyMethod2(); 

...하지만, 내 생각 시간이 꽤 혼동 될 수 있습니다 : 대안으로

는, 다음과 같이 사용할 수 있습니다 당신이 정적 함수를 호출 할 수있는 별도의 변수를 필요로하지 않기 때문에

$options = MyClass::getOptions(); 

실제로, 적은 메모리를 낭비 : 나는이 대안은 생각합니다.

관련 문제