인터페이스를 사용하면 클래스가 구현해야 하는 메서드를 지정할 수 있지만 이러한 메서드의 특정 내용을 정의할 필요는 없습니다.
인터페이스는 표준 클래스 정의와 마찬가지로 인터페이스 키워드를 통해 정의되지만, 그 안에 정의된 메소드는 모두 비어 있습니다.
인터페이스에 정의된 모든 메소드는 공개되어야 합니다. 이는 인터페이스의 특징입니다.
구현
인터페이스를 구현하려면 Implements 연산자를 사용합니다. 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 합니다. 그렇지 않으면 치명적인 오류가 보고됩니다. 클래스는 여러 인터페이스를 구현할 수 있습니다. 쉼표를 사용하여 여러 인터페이스의 이름을 구분하세요.
참고:
여러 인터페이스를 구현할 때 인터페이스의 메서드는 동일한 이름을 가질 수 없습니다.
참고:
인터페이스는 확장 연산자를 사용하여 상속될 수도 있습니다.
참고:
인터페이스를 구현하려면 클래스는 인터페이스에 정의된 메서드를 정확히 동일한 방식으로 사용해야 합니다. 그렇지 않으면 치명적인 오류가 발생합니다.
상수
인터페이스에서도 상수를 정의할 수 있습니다. 인터페이스 상수는 클래스 상수와 정확히 동일하게 사용되지만 하위 클래스나 하위 인터페이스로 재정의될 수 없습니다.
예
예 #1 인터페이스 예
interface ITemplate { public function setVariable($name,$var); public function getHtml($template); } //实现接口 //下面的写法是正确的 class Template implements ITemplate { private $vars = array(); public function setVariable($name,$var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value){ $template = str_replace('{'.$name.'}',$value,$template); } return $template; } } //下面的写法是错误的,会报错,因为没有实现getHtml() class BadTemplate implements ITemplate { private $vars = array(); public function setVariable($name,$var) { $this->vars[$name] = $var; } }
예 #2 확장 가능한 인터페이스
interface a { public function foo(); } interface b extends a { public function baz(Baz $baz); } //正确写法 class c implements b { public function foo(){} public function baz(Baz $baz){} } //错误写法 class d implements b { public function foo(){} public function baz(Foo $foo){} }
예 #3 다중 인터페이스 상속
interface a { public function foo(); } interface b { public function bar(); } interface c extends a,b { public function baz(); } class d implements c { public function foo(){} public function bar(){} public function baz(){} }
예제 #4 인터페이스 상수 사용
interface a { const b = 1; } //输出接口常量 echo a::b; //错误写法 class b implements a { const b = 1; }
인터페이스와 유형 제약 조건은 객체에 특정 메서드가 포함되도록 하는 좋은 방법을 제공합니다. instanceof 연산자 및 유형 제약 조건을 참조하세요.