2010-02-08 3 views
89

manual을 보았지만 대답을 찾을 수 없습니다.PHP의 클래스 메서드의 기본 표시

가시성 선언이없는 메소드에 대한 PHP의 기본 표시 여부는 무엇입니까? PHP는 Java와 같은 패키지 가시성을 갖고 있습니까?

예를 들어 다음 코드에서 go()은 공개 되었습니까?

class test { 
    function go() { 
    } 
} 

내가 물어 그 이유는 나는 많은 생성자 코드가 function __construct()public function __construct() 같은 몇 가지로 작성 본 적이 있다는 것입니다. 그들은 동등한가?

답변

141

기본값은 공개입니다.

클래스 방법, 민관 또는 보호로 정의 될 수있다. 명시 적 가시성 키워드없이 선언 된 메소드는 public으로 정의됩니다.

http://www.php.net/manual/en/language.oop5.visibility.php

+4

동일한 속성으로 이동합니다. –

+0

상수와 동일합니다. – Kolyunya

18

기본값은 공개입니다. 항상 포함하는 것이 좋은 습관이지만 PHP4는 액세스 한정자가없는 클래스를 지원하므로 레거시 코드에서 PHP를 사용하지 않는 것이 일반적입니다.

아니요. PHP에는 패키지 가시성이 없습니다. 주로 최근까지 PHP에 패키지가 없었기 때문입니다.

+1

왜 "좋은 연습은 항상 포함"그것입니다 PUBLIC입니까? – Ian

+14

@Ian : "명시 적 묵시적"(Zen of python) (http://stackoverflow.com/questions/228181/the-zen-of-python)이 말했듯이 말하기 때문에). 다른 프로그래머가 생성자가 개인용인지 공용인지 궁금해하는 두뇌주기를 낭비하게 만듭니다. 사람들이 항상 접근 수정자를 사용한다면 원래의 포스터는이 질문을하지 않았을 수도 있습니다. – User

+0

또한 Java와 같은 언어의 경우 기본값은 package-private입니다. 패키지는 디자인별로 개인적으로 항상 궁금하거나 개발자가 특별히 지정하지 않은 경우 (특히 선배가 아닌 개발자를 다루는 경우) . 이것이 PMD가 다음과 같은 규칙을 포함하는 이유입니다. https://pmd.github.io/pmd-5.5.2/pmd-java/rules/java/comments.html#CommentDefaultAccessModifier – Johnco

7

기본값은 public입니다. 그 이유는 아마도 이전 코드가 public이 될 것으로 기대하기 때문에 이전 버전과의 호환성 일 것입니다 (public이 아니면 작동하지 않을 것입니다).