programing

private / protected 메서드가있는 인터페이스를 가질 수 있습니까?

nasanasas 2020. 11. 7. 10:10
반응형

private / protected 메서드가있는 인터페이스를 가질 수 있습니까?


PHP 5에서 private / protected 메소드가있는 인터페이스를 가질 수 있습니까?

지금 나는 :

interface iService
{
    private method1();
}

오류가 발생합니다.

구문 분석 오류 : 구문 오류, 예상치 못한 T_STRING, 예상 T_VARIABLE

인터페이스가 공용 메서드 만 포함 할 수있는 경우임을 확인하고 싶습니다.


인터페이스에 대한 PHP 매뉴얼 페이지 를 명시 적으로 상태 :

인터페이스에 선언 된 모든 메서드는 공용이어야합니다. 이것이 인터페이스의 특성입니다.

나는 이것이 당신이 얻는 오류를 설명한다고 생각합니다 ;-)


인터페이스는 해당 인터페이스를 구현하는 클래스의 공용 메서드를 설명하는 데 사용됩니다. 인터페이스에서 개인 메서드를 가질 수 없습니다. 인터페이스의 모든 메소드는 사용중인 것으로 간주되며 변경해서는 안됩니다.

인터페이스 는 PHP 링크이지만 OO 프로그래밍의 표준입니다.


일반적으로 인터페이스의 유일한 기능은 상속되기 때문에 인터페이스는 공용 멤버 만 가질 수 있습니다.

PHPfreaks.com 튜토리얼에서 :

PHP5는 인터페이스를 제공합니다. 일반적인 의미에서 인터페이스와 혼동하지 않도록 interface 키워드는 추상 클래스처럼 확장하지 않고도 클래스에 공통 인터페이스를 적용하는 데 사용할 수있는 엔티티를 생성합니다. 대신 인터페이스가 구현됩니다.

인터페이스는 추상 클래스와 다릅니다. 하나는 실제로 수업이 아닙니다. 그들은 속성을 정의하지 않으며 어떤 동작도 정의하지 않습니다. 인터페이스에서 선언 된 메서드는이를 구현하는 클래스에서 선언되어야합니다.

보다 일반적인 의미에서 인터페이스는 객체가 다른 코드와 상호 작용하는 방식에 대한 정의이므로 모든 메서드는 public으로 선언되어야합니다 (이 장의 가시성 섹션 참조). 추상 클래스를 사용하면 추상 메서드는 모든 가시성을 가질 수 있지만 확장 클래스의 구현은 동일하거나 더 약한 가시성을 사용해야합니다. 인터페이스를 구현하면 메서드가 주제 클래스에 추상 메서드로 추가되며, 구현하지 못하면 다음과 같은 오류가 발생합니다.

치명적인 오류 : SomeConcreteClass 클래스에는 n 개의 추상 메서드가 포함되어 있으므로 추상으로 선언하거나 나머지 메서드를 구현해야합니다. 예, 추상 클래스는 인터페이스를 구현할 수 있습니다.


인터페이스는 유형 선언입니다. 유형은 값의 집합과 외부에서 수행 할 수있는 작업 집합입니다. 개인적인 방법은이 그림에 맞지 않습니다.

interface T {
  public /*int*/ function f(array $a);
}
interface U {
  public /*T*/ function g(T $t);
}

class C implements U {
    public function g(T $t) {
        ...
        $x = $t->f();
        ...
    }
}

인터페이스는 객체의 인터페이스를 명시하기 때문에 유용합니다. 객체가 환경과 통신하는 방법.

이제 T::f비공개로 선언 할 수 있다고 가정 해 보겠습니다 . 다른 물체에 어떻게 유용할까요? 외부에서 호출 할 수 없으며 인터페이스의 일부가 아닙니다.


대부분의 경우 인터페이스 정의는 다른 모듈이 클래스의 동작과 API를 보장하는 데 도움이됩니다. 이러한 경우 개인 메서드는 다른 모듈이 액세스하거나 이해할 수있는 것이 아닙니다. 그렇기 때문에 인터페이스에 개인 메서드를 넣을 수 없습니다.

참고 URL : https://stackoverflow.com/questions/1876516/is-it-possible-to-have-an-interface-that-has-private-protected-methods

반응형