php 추상클래스에서 인터페이스를 사용할경우
조회수 485회
interface Menulist{
public function menu(array $list);
}
abstract class Test implements Menulist{
private $menus;
public function __construct($menuarr=array()){
$this->menus=$menuarr;
}
function menu(){
for($i=0; $i<count($this->menus); $i++){
echo $this->menus[$i];
}
}
abstract function bmb();
}
php 공부하던중에 나름 한번 예시로 만들어봤는데 (맞게 한건지는 모르겠습니다) 저렇게 인터페이스에 매개변수를 배열로 설정시 추상클래스에서 인터페이스의 메소드 부분에 인자를 어떻게 전달 해야되나요? 그리고 추상클래스에서 꼭 인터페이스의 메소드를 꼭 구현을 해야되는지 궁금합니다!
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
먼저, 인터페이스와 추상클래스에서 정의한 함수의 경우 구현부에서 매개변수가 완벽하게 일치해야합니다.
올려주신 코드에서 잘못된 부분을 적어두겠습니다.
interface Menulist{ public function menu(array $list); } abstract class Test implements Menulist{ private $menus; public function __construct($menuarr=array()){ $this->menus=$menuarr; } function menu(){ // 이라인이 function menu(array $list) { 이렇게 되어야 합니다. for($i=0; $i<count($this->menus); $i++){ echo $this->menus[$i]; } } abstract function bmb(); }
또한 인터페이스에서 정의한 함수의 경우 그것을 상속받은 추상클래스에서는 구현을 하지않아도 됩니다.
다만 구현클래스에서는 반드시 해당 함수를 구현해야합니다.비슷한 구조를 가지고있는 간단한 예제를 작성해보았습니다.
interface Person { public function setFamily(array $family); public function getFamily(); } abstract class Student implements Person { protected $family; } class HighClassStudent extends Student { public function setFamily(array $family = []) { $this->family = $family; } public function getFamily() { return $this->family; } } $highClassStudent = new HighClassStudent(); $highClassStudent->setFamily(['엄마', '아빠', '동생', '나']); echo(var_dump($highClassStudent->getFamily()));
댓글 입력