2011-07-03 3 views
0

내 웹 사이트를 실행할 때 정적 및 비 정적 기능과 클래스 속성과 혼동을 느낍니다.PHP : 정적이 아닌 정적보다 낫습니까?

정적이 아닌 메서드를 사용하는 대신 정적 함수를 사용하여 전체 웹 사이트를 작성하는 것이 더 나은지 설명 할 수 있습니까? Google에서이 기능을 많이 찾을 수 없습니다.

+0

나는 단독으로 또는 다른 것을 사용해야한다고 생각하지 않습니다. 인스턴스를 의미하는 경우에만 정적을 사용합니다. – Ibu

+0

애플리케이션의 아키텍처 및 (소프트웨어) 디자인이 어떻게 보이는지에 따라 크게 달라 지므로 Google에서는 그다지 많이 찾을 수 없습니다. – slhck

+0

정적 및 비 정적 기능을 교환 할 수 없습니다. 어떤 클래스도 상태를 저장하기 위해 객체 인스턴스가 필요하지 않습니까? – Dogbert

답변

1

메서드가 "this->"의 데이터에 액세스해야하는 경우 메서드를 비 정적 메서드로 만들어야합니다. 그런 다음 객체를 인스턴스화해야합니다 ("new"를 통해).

모든 메서드 사용이 함수 매개 변수에 포함 된 데이터 인 경우 메서드를 정적으로 만드는 것을 고려하십시오. 또는 정적 메서드 만 사용하여 별도의 클래스를 만듭니다.

1

이것은 실제로 응용 프로그램 설계 방법에 따라 다릅니다. 함수를 호출 할 수 있고 호출 할 클래스가없는 경우 정적으로 선언하십시오. 그렇지 않으면하지 마십시오. 거의 모든 경우에 정적 함수 만 사용하는 것은 의미가 없습니다 (절차 코드를 작성하는 것이 좋을 수 있으므로) 두 가지를 조합하여 사용하게됩니다.

0

OO 코드를 작성하고 정적 변수와 메소드 만 사용하는 것은 의미가 없습니다. 절차 코드 작성과 동일합니다. OOP에서 정적 코드만을 사용하여 제공하는 모든 기능을 활용할 수는 없습니다.

나는 정적 메서드 나 속성을 사용하면 안된다는 말은 아니지만 많이 사용하면 잘못된 OO 디자인의 지표가됩니다.

+0

그리고 정적이 아닌 메서드와 속성 만 사용하는 것이 좋습니다. – mkram0

+0

나는 둘 다의 조합이 최고 일 것이라고 말할 것이다. 예 : 일부 디자인 패턴은 정적 기능에 크게 의존합니다 (예 : Singleton). 필요할 때만 정적 코드를 사용해야합니다. – Headshota

0

너무 엄격한 클래스 사이에 바인딩을 만들기 때문에 통계는 해롭고 피해야하는 학교가 있습니다. 예 : 클래스 A와 B가 서로의 메소드를 호출하고 AA와 BB를 그 클래스에서 서브 클래스로 만들고 AA가 BB의 코드를 호출 할 것으로 기대하면 서로간에 인스턴스 만 알면 잘 작동하지만 실패 할 것입니다 정적 호출은 여전히 ​​A/B를 가리 킵니다.

어쨌든 PHP의 정적 통계는 매우 나쁩니다. 5.3 이전에 늦은 정적 바인딩이 없습니다 (객체가 자체 정적 메소드를 호출 할 수 없으므로 OOP 아키텍처에서 정적 함수를 쓸모 없게 만듭니다.) 정적 함수를 엄격 모드에서 정적으로 호출 할 수 없으며 함수를 잘못된 방식으로 호출 할 수 없습니다. 매우 이상한 오류가 발생하고, 클래스가 부모와 정적 변수를 공유합니다 ... 불확실한 경우, 정적이 아닌 IMHO를 사용해야합니다.

관련 문제