2013-08-07 2 views

답변

2

다음은 일반적으로 PHP에서 사용됩니다 MyNamespace\Foo::bar()


편집 : 정적 메소드를 동적으로 호출 할 수 있기 때문에 대답은 당신이 두 경우 모두에 대해 다루 MyNamespace\Foo->bar()을 사용할 수,

을 언급. 그러나 모든 문서에서 항상 사용 된 표준 사용법과 IDE가 일반적으로 docblock에서 Ctrl + 클릭을 통해 인식 할 수있는 사용법은 처음 언급 한 것처럼 이중 콜론으로 처리됩니다.

나는 많은 경우에 교리의 접근법을 보지 못했습니다.

+0

정적 메서드가 액세스되는 방법을 고려할 때 약간 애매한 것으로 생각되지만 ... 대안. –

+1

Doctrine은 정적 메소드에 대해'MyNamespace \ Foo :: bar()'를 사용하고, 인스턴스 메소드에 대해서는'MyNamespace \ Foo # baz()'를 사용합니다. 속성에도 동일하게 적용됩니다. 또한 문자열에'\\'를 추가 할 필요가 없다는 것에주의하십시오. – Ocramius

2

자바와 비슷한 점이 있다면 점 표기법을 사용하지 않는 이유는 무엇입니까? myNamespace.Foo.bar()?

+0

제가 생각해 볼 수있는 가장 큰 이유 중 하나는 최상위 패키지 멤버와 내부 클래스를 구별하지 못한다는 것입니다. 나는 Java가 두 가지를 똑같이 보이게 만들지 않았고, 클래스의 정의를 찾을 2^깊이의 장소를 제공했습니다. : P 내가 표기법을 생각해 냈다면, 대신 내부 클래스를 나타내는'::'과 최상위 멤버와 하위 패키지를 나타내는'.'를 사용할 수 있습니다. – cHao

+0

흠, 너를 올바르게 이해하는지 모르겠다. 일반적으로 패키지 이름은 모두 소문자로 시작하며, 클래스 이름은 모두 대문자로 시작합니다. 따라서 대문자로 시작하는 두 번째 이름 부분은 하위 클래스입니다. 그게 당신에게 적합하지 않다면 하위 클래스가 달러 기호로 클래스 이름에서 분리 된 stacktrace 표기법을 사용할 수 있습니다. – oddparity

+0

"일반적으로"충분하지 않습니다. 대문자 대 소문자는 쉽게 무시할 수있는 규칙입니다. 'com.plbth.Foo' 또는'com.plbth.ehh.foo'라는 클래스를 만들지 못하게하는 것은 아무것도 없습니다. 당신은'$'에 대한 요지를 가지고있다. 많은 중첩으로 끔찍한 것을 얻을 수는 있지만 그 중첩은 더 깊은 문제의 증상입니다 ... – cHao