PHP에서 클래스 메서드의 기본 가시성


118

나는 보았다 매뉴얼 ,하지만 난 대답을 찾을 수 없습니다.

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

예를 들어, 다음 코드에서 go()공개 또는 비공개입니까?

class test {
  function go() {
  }
}

내가 물은 이유는으로 작성된 많은 생성자 코드 function __construct()와 public function __construct(). 동등합니까?

답변:



22

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

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


16
@Ian : "명시적인 것이 암묵적인 것보다 낫기 때문에"( 파이썬 의 선이 말했듯이). 다른 프로그래머가 생성자가 개인인지 공개인지 또는 무엇인지 궁금해하는 두뇌 사이클을 낭비하게 만듭니다. 사람들이 항상 액세스 수정자를 사용했다면 원래 포스터가이 질문을하지 않았을 수도 있습니다.
— 사용자

또한 Java와 같은 언어에서 기본값은 패키지 전용이며, 설계 상 패키지 전용인지 아니면 개발자가 지정하는 것을 잊었는지 항상 궁금해합니다 (특히 수석 개발자가 아닌 개발자를 다룰 때). 이것이 PMD에 다음과 같은 규칙이 포함 된 이유입니다. pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
— Johnco

9

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


추론에 대한 명성.
— Guney Ozsan


1

가시성 키워드 ( public, private또는 protected)를 사용 하지 않으면 메서드는 public이 됩니다. 그러나 이러한 방식으로 속성을 정의 할 수 없습니다. 들어 속성 , 당신은 선언에 대한 가시성 키워드를 추가해야합니다.

클래스에서 선언되지 않은 속성의 경우 메서드 내에서 값을 할당하면 공개 가시성을 갖게됩니다.

<?php
class Example {
    public $name; 
    public function __construct() {
        $this -> age = 9; // age is now public
        $this -> privateFunction();
    }
    private function privateFunction() {
        $this -> country = "USA"; // this is also public
    }
}

0

function __construct()와 public function __construct()같은 방법으로 이름으로 작동합니다.

메서드 이름에 대한 접두사를 정의 할 수없는 경우 기본적으로 public이어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.