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.