>  기사  >  백엔드 개발  >  PHP 추상과 인터페이스의 차이점

PHP 추상과 인터페이스의 차이점

WBOY
WBOY원래의
2016-07-25 08:46:431062검색
1.php 인터페이스 클래스: 인터페이스
사실 그 기능은 매우 간단합니다. 모두 다른 사람이 작성한 일부 클래스를 호출하려면 특정 함수의 구현 메소드 이름을 어떻게 알 수 있습니까? 이때 PHP 인터페이스 클래스가 작동합니다. 이는 다음과 같은 하위 클래스로 구현되어야 합니다.
1 인터페이스 쇼핑
2 {
3개 공개 기능 구매($gid);
4 공개 기능 판매($gid);
5 공개 기능 보기($gid);
6}
상점 인터페이스 클래스를 선언하고 세 가지 메소드(구매, 판매, 보기 및 이 클래스의 모든 하위 클래스 상속)를 정의합니다. 이 세 가지 메소드는 하나도 빠짐없이 구현되어야 합니다. 서브클래스는 이를 구현하지 않으므로 작동하지 않습니다. 사실 인터페이스 클래스는 직설적으로 말하면 클래스의 템플릿이자 클래스의 규정이다. 이 범주에 속하면 어떻게 하든 내 규정을 따라야 한다. 다음과 같은 사항은 귀하에게 달려 있습니다.
BaseShop 클래스는 Shop을 구현합니다
{
공개 기능 구매($gid)
{
echo('ID:'.$gid.'로 제품을 구매하셨습니다.');
}
공개 기능 판매($gid)
{
echo('ID:'.$gid.'로 제품을 판매했습니다.');
}
공개 기능 보기($gid)
{
echo('ID:'.$gid.'로 제품을 조회하셨습니다.');
}
}
여러 사람이 협력하는 대규모 프로젝트에서 특정 기능에 대해 다른 사람에게 물어볼 필요가 없도록 인터페이스 클래스가 있으면 얼마나 편리한지 생각해 보세요. .. 메소드 이름이 무엇인가요? 물론, 이것이 마음에 드시면 어쩔 수 없습니다.
결론: 인터페이스 클래스는 클래스의 리더로서 방향을 나타내며 하위 클래스는 지정된 메소드를 완료해야 합니다.
2.php 추상 클래스: abstract
사실 추상 클래스와 인터페이스 클래스는 부분적으로 비슷한 문장을 본 기억이 납니다. , 추상 클래스는 클래스의 일부를 가져옵니다. 이 문장은 재미있어 보이지만 사실 추상 클래스의 기능은 많은 클래스가 많은 메소드를 사용하는 것을 발견하면 이를 계속 반복한다는 것입니다. . 그러면 추상 클래스 사용을 고려할 수 있습니다. "클래스를 다시 작성할 수는 없나요? 각 공용 클래스에 대해 이 공용 클래스를 인스턴스화하고 동일한 메서드를 호출합니다." 사실 이것이 추상 클래스가 하는 일이지만 인스턴스화 단계를 줄여 이 클래스의 메서드를 직접 호출하는 것만큼 편리하고 이 메서드를 오버로드할 수도 있습니다. 예:
1개의 추상 클래스 BaseShop
2 {
3개 공개 기능 구매($gid)
4 {
5 echo('ID:'.$gid.'로 제품을 구매하셨습니다.');
6 }
7 공개 기능 판매($gid)
8 {
9 echo('ID:'.$gid.'로 제품을 판매했습니다.');
10 }
11 공개 기능 보기($gid)
12 {
13 echo('ID:'.$gid.'로 제품을 조회하셨습니다.');
14 }
15}
16개 클래스 BallShop이 BaseShop을 확장합니다
17 {
18 var $itme_id = null;
19 공개 함수 __construct()
20 {
21 $this->itme_id = 2314;
22 }
23 공개함수 공개()
24 {
25 $this->sell($this->itme_id);
26 }
27}
28
위와 같이 store 클래스를 정의하고 buy, Sell, view 등의 모든 부분을 추출한 예가 있는데, 이 메소드들은 abstract 클래스에 구현되어 있습니다. 그러면 이를 상속받은 하위 클래스가 자동으로 이러한 메서드를 얻고, 하위 클래스는 고유한 작업을 수행하고, 코드 중복을 도입하고, 재사용성을 향상시킵니다.
결론: 추상 클래스는 서비스를 많이 제공하는 서비스입니다. 서비스를 제공하지 못하는 것이 불만스러우면 사용할 수 있습니다. 직접 사용해도 됩니다. 추상 함수 메소드는 인터페이스와 다소 유사하며 상위 클래스에서 구현되어야 합니다. 그러나 추상으로 선언되지 않은 메소드는 하위 클래스의 공개 메소드가 됩니다. 하위 클래스






성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.