2012-07-16 3 views
-2

보호없는 것 사이의 차이.<code>private</code> 및 <code>protected</code> 방법 사이에 큰 격차로 개인 및 PHP에서

나는 당신이 좋은 이유가없는 asked why I should use protected in PHP Chatroom and got this answer:

하지 않음 : 예
좋은 이유는, 당신의 코드가되면 폐쇄 소스 라이브러리
그렇다하더라도, 그것은 반사

로 대체 할 수 있습니다

그래서 -

private 방법은 잠재적으로 Reflectio로 대체 될 수 있다면 ns, private 방법의 요지는 무엇입니까?

+1

따라서 재정의 할 수 있지만 적어도 구현자는 그가이 경우에 뭔가 잘못하고 있음을 알고 있습니다. –

+0

@WouterH 사실이지만, 심지어 재정의 할 수 있다는 사실을 감안할 때 허점이 있습니다. – Neal

+0

소파에서 뛰어 내릴 수도 있습니다. 꼭 그렇게해야한다는 것을 의미하지는 않습니다. –

답변

9

privateprotected은 쉽게 옳은 일을 수행하는 코드를 작성하는이 있도록한다. 당신이 눈치 챘을 때, 그들은 깨지기 쉽지 않습니다 - 당신이 원한다면 당신을 우회하는 것을 막을 수있는 아무것도 없습니다. 그것은 그들이 실수로 에서 당신을 보호하기위한 것이므로에서 잘못된 것을하고, 실제로는 을 시도하지 말고을 시도합니다.

당신이 반사 우회 그들, 당신 해야을 의미하지 않는다 수있다. privateprotected을 "보증이 무효 인 경우 무효"스티커로 간주 할 수 있습니다. 만약 당신이 그들을 무시하고 물건을 직접 주위에 쓰레기, 개체/클래스가 제대로 동작하지 않을 수 있습니다. 당신이 그 내부에 엉망진창을 찍었 기 때문에 그 시점에에 대한 의무가 없습니다. 그렇게하는 코드는 전적으로 책임이 있습니다.

이제 제목에 질문으로 ... 당신은 하위 클래스를 위해 특별히 인터페이스를 선언 protected를 사용; 당신은 기본적으로 당신이 그 물건을 직접 사용하겠다고 선언하는 반면, private은 그렇지 않다고 말합니다. 그들이 그것을 무시하는지 여부는 그들에게 달렸지 만, 그렇다면 그들이 망쳐 버렸습니다. 당신은 그들에게 경고하려고했습니다.

1

예, 리플렉션을 사용하여 재정의 할 수 있지만 요점은 아닙니다. 요점은 일반적인 사용에서 메소드에 대한 액세스를 제한하는 것입니다. 즉, 누군가가 클래스를 사용하고 있다면 위반하는 메소드이므로 액세스 할 수 없어야합니다. 클래스가 가진 계약.

IT/정보 보호, 그것의 용도에 따라 그들이 만든 한 경우 누군가가 다른 클래스에서 액세스 할 필요가 없습니다 때문에 그들은 그것을 한 적이 다음 방법은 비공개 경우 그래서는 개인 보호 있어요 아마도 하위 클래스 만이 메소드에 액세스 할 수있을 것입니다.