2016-12-30 3 views
1
class Test 
    { 

     function __construct(){ 
      # code... 
     } 

     public static function read(){ 
      echo 'hello'; 
     } 
    } 

$a = new Test(); 

$a::read(); // it shows "hello" ?? 

die(); 

클래스 인스턴스에서 정적 메서드를 호출 할 수 있습니까? 나는 그것을 어떻게 막을 수 있습니까?인스턴스 개체에서 정적 메서드 호출 금지

+1

정적 메서드는 전역 함수이며 가시성이 제한되어 있습니다 (선택 사항). – axiac

답변

1

$a::read()Test::read();을 작성하는 또 다른 방법 일 뿐이므로 인스턴스가 아닌 클래스에서 정적 메서드를 호출합니다. 다른 방식으로 작성하는 사람에 대해 걱정할 필요가 없습니다. 똑같은 일을하기 때문에.

그런데 많은 언어에서 허용됩니다. 비록 그것이 권장되지 않습니다. 자바에서는 예를 들어 다음과 같이 할 수 있습니다 :

public class Main { 
    public static void main(String[] args) { 
     Main m = new Main(); 
     m.test(); // Static member accessed via instance reference 
     Main.test(); 
    } 

    public static void test() { } 
} 

그리고 같은 일을합니다.

+0

설명을 주셔서 감사합니다. 그러나 내 원래 코드에서 개체를 반환하는 일부 체인 메서드가 있고 모든 반환 값을 변경하기 때문에 그 동작을 원하지 않습니다. 그 것을 방지 할 수 있습니까? – medBo

+0

이것이 언어의 필수 기능이기 때문에 나는 그것을 막을 수 없다고 확신합니다. –

+0

고맙습니다. 그럼 코드의 디자인을 바꿀 것입니다. – medBo

관련 문제