2011-08-29 5 views
6

정적 메서드로 모든 클래스에서 실제로 이해할 수없는 몇 가지 일반적인 사용 함수가 있습니다. 네임 스페이스 아래에 캡슐화하여 전역 범위에 정의 된 함수와 충돌이 없도록하고 싶습니다. 내 네임 스페이스 클래스의 경우, \ ​​My \ Namespaced \ MyClass와 같은 클래스가 포함 경로에있는 My/Namespaced/MyClass.php에있는 패턴을 사용합니다.PHP 네임 스페이스 함수 모범 사례

네임 스페이스 기능을 배치해야 할 곳에 대한 모범 사례가 있습니까? 지금은 같은 네임 스페이스 아래에있는 클래스를 가지고있는 디렉토리 내의 "functions.php"에 넣을 것입니다. 예를 들어 \ My \ Namespaced \ myFunction은 My/Namespaced/functions.php에 있습니다.

또한 클래스가 자동로드되는 것과 같은 방식으로 이러한 함수를 자동로드하는 방법이 있습니까?

답변

5

또한 클래스가 자동로드되는 것과 같은 방식으로 이러한 함수를 자동로드하는 방법이 있습니까?

전역 함수에 대한

하지,하지만 경우 ...

는 배치해야 네임 스페이스 기능을위한 가장 좋은 방법은 있나요?

"최선의 방법"대신에 개체를 사용하는 것을 고려해 볼 수 있지만 완전히 그렇지는 않습니다.

전역 함수에 대한 자동로드가 없으므로 함수를 정적 함수로 클래스에 캡슐화 한 다음 자동 공급기가 작동하게됩니다. 그래서 이것이 제안 일지 모르지만 정적 함수가 전반적인 설계에 미치는 영향에 대해 분명히해야합니다.

다음과 같이 말하자면 : 전역 함수가 좋으면 전역 정적 클래스 함수를 사용하는 것이 좋습니다. 클래스의 이름을 바꾸면 (전역 함수 이름과 마찬가지로) 자동으로로드 할 수있는 파일 이름을 만들 수 있습니다.

편집 : 글로벌 쓸 때, 나는 정규화 된 이름을 함수의을 의미, 즉 \로 시작 하나입니다. Name resolution rulesDocs을 참조하십시오.

+0

이 모두는 글로벌하지 않으며 PHP 5.3 네임 스페이스를 사용합니다. – igorw

+0

@igorw : 그게 무슨 소리 야? 글로벌이 아닌 것은 무엇입니까? 나는 단지 그것을 얻지 않고, 정교하게 자유롭게 느낀다. – hakre

+0

어쩌면 나는 당신이'글로벌'에 의해 무엇을 의미하는지 모르겠다. 내가 말한 것은 문제의 함수가 전역 네임 스페이스에 없다는 것입니다. – igorw

2

불행히도 함수에 대한 자동 로딩이 없습니다 (PHP 개발자가 결정했기 때문에 ...). 따라서 함수 파일을 어떻게 가져올 지 생각해야합니다. 예를 들어, 기능을 사용하면 (예 : importFunction($namespace); 네임 스페이스를 파일 이름과 매핑하고 파일을 포함) 또는 모든 파일을 포함 할 수 있습니다 (시작시 등).