2011-09-03 3 views
8

"패키지"가시성이 Java에서 작동하거나 C++에서 "친구"가시성과 동일한 방식으로 PHP에서 가시성을 제한 할 수있는 방법이 있습니까? 대형 OOP 프로젝트를 유지 관리하고 어떤 사람도 코드를 사용할 수 없도록하는 가장 좋은 방법은 무엇입니까?PHP 친구/패키지 가시성

필자는 최대한 개인적이고 보호 된 가시성을 사용하지만 때로는 충분하지 않습니다. 이 요청에 대해 알고 있습니다 : https://bugs.php.net/bug.php?id=55331. PHP와 같은 것을 구현하는 과정이 있습니까? 코드 (메서드, 클래스 변수)를 어디에서나 액세스 할 수 없도록 보호 할 수있는 해결 방법이 있습니까?

+0

Java의 패키지와 꼭 같지 않지만 [namespaces] (http://php.net/manual/en/language.namespaces.php)는 코드 캡슐화를 위해 사용될 것입니다. – Shef

+0

간단한 예를 입력 해주세요. –

+0

정말로 필요하다면'debug_backtrace' [http://php.net/manual/en/function.debug-backtrace.php]를 사용하여 코드를 호출하는 코드를 확인할 수 있습니다. 기본적으로 사용자 자신의 런타임 액세스 제어를 작성합니다. 아마 그 가치보다 더 많은 일이 벌어 질 것이고,'debug_backtrace'는 성능에 문제가있을 것입니다. – Chris

답변

3

으로는 here 진술 :

아니요 네임 스페이스를 선언 한 후 변수를 설정할 수 있지만 변수 은 항상 전역 범위에 존재합니다. 그들은 결코 네임 스페이스에 묶여 있습니다. 당신은 가시성을 제한 할 언어 구조가 없다 오늘까지 http://www.php.net/manual/en/language.namespaces.faq.php

+0

답변 해 주셔서 감사합니다. Howerver, 나는 여전히 코드의 보호를위한 모범 사례 또는 해결 방법을 알고 싶습니다. –

+0

이것이 OP의 질문에 어떻게 대답하는지 모르겠습니다. 네임 스페이스는 액세스 가시성과 아무 관련이 없습니다. –

+0

@ Markus 나는이 오래된 대답이 명시 적으로 언급하지 않는다는 것에 동의하지만 모든 네임 스페이스의 모든 것이 전역이므로 모든 멤버가 " 개인 "또는"보호 된 ". – CodeCaster

8

에 어떤 이름 해상도 설명의 부재에서 그 추론 할 수 있습니다. 하지만 당신은 phpDocumentor의 @internal으로 클래스를 주석을 달 수 있습니다 :

@internal 태그는 관련 구조 요소는 소프트웨어의이 조각의 내부 동작을 위해 순수하게 사용되는 것을 나타내는 @api 태그의 대조로 사용할 수 있습니다.

해당 제안을 따르는 것은 API 사용자의 몫입니다.