【PHP】 인터페이스와 학급 추상화에 대한 구분 사용

10828 단어 PHP
이 글은 파티 이사무사/파티 연결 Advent Calendar 2019 다음날의 글이다.

계기.


업계 경험이 없어서 엔지니어가 된 지 약 반년이 지났다.최근에 제로에서 도구를 제작할 수 있는 기회를 얻었습니다. 비록 하나의 형식이 되었지만 확장성과 유지보수성을 확보하기 위해 코드에 제한된 디자인이 필요하다고 생각해서 이런 것들을 조사했습니다.

인터페이스와 반의 추상화는 비슷하다


이음매


여러 종류에서 공통된 기능을 실현하기 위해 실체를 정의하지 않은 상황에서 지정된 구조를 사용하고 인터페이스를 사용하면 특정한 대상에 특정한 기능(방법)이 있음을 보증한다.인터페이스에 정의된 방법을 실현하지 않으면 치명적인 오류가 발생할 수 있습니다.

클래스 추상화


추상적인 부류에서 공통된 기능을 정의하고 각 부류에서 특정한 기능을 각각 실현하고자 할 때 정의한다.추상화를 사용하려면 추상화된 클래스를 하위 클래스에 계승하고 모든 abstract 방법을 실시해야 한다.

어떻게


여러 가지 결과를 조사한 결과 내가 느낀 인상은 바로 이것이었다.PHP는 학급과 인터페이스를 다중으로 승계할 수 있지만 학급에서 아이가 부모를 부르는 방법은 어떤 부모가 호칭되는지 알기 어려우므로 학급의 다중승계를 사용하지 않는 것이 좋다.

학급의 추상화에 관해서는 일반적인 상속처럼 여러 학급에서 공통적으로 처리되지만 부모님이 사용하지 않거나 사용하고 싶지 않은 상황에서만 사용하면 된다고 생각합니다(자신이 그렇게 생각하고 이렇게 사용한다면 평론해 주십시오.인터페이스에 관해서는 지시서를 사용할 수 있는 방법인지, 어떤 방법을 만들지 결정하는 학급은 다른 개발자가 의존하는 부분을 일할 때 사용할 수 있다고 생각합니다.(자신은 이렇다(ry).또 사용법의 유형선언을 통해 학급과 인터페이스를 구분할 수 있는 것도 장점이라고 생각한다.

쓰다


이음매

interface Player
{
    public function play();
    public function stop();
}

class musicPlayer implements Player
{
    public function play()
    {
      echo '音楽再生中' . PHP_EOL;
    }

    public function stop()
    {
      echo '音楽停止中' . PHP_EOL;
    }
}

class moviePlayer implements Player
{
    public function play()
    {
      echo '動画再生中' . PHP_EOL;
    }

    public function stop()
    {
      echo '動画停止中' . PHP_EOL;
    }
}


$obj1 = new musicPlayer();
$obj2 = new moviePlayer();

$obj1->play(); // 音楽再生中
$obj1->stop(); // 音楽停止中

$obj2->play(); // 動画再生中
$obj2->stop(); // 動画停止中

클래스 추상화

abstract class Polygon
{
  public function showHeight()
  {
    return $this->height;
  }

  public function showWidth()
  {
    return $this->width;
  }

  abstract public function clucArea();
}

class Square extends Polygon
{
  public $height = 1;
  public $width = 1;

  public function clucArea()
  {
    return $this->height * $this->width;
  }
}

class Triangle extends Polygon
{
  public $height = 2;
  public $width = 2;

  public function clucArea()
  {
    return $this->height * $this->width / 2;
  }
}

$obj1 = new Square;
$obj2 = new Triangle;

echo $obj1->showHeight() . PHP_EOL; // 1
echo $obj2->showWidth() . PHP_EOL;  // 2

echo $obj1->clucArea() . PHP_EOL; // 1
echo $obj2->clucArea() . PHP_EOL; // 2

참고 자료

  • 대상 인터페이스
  • 클래스 추상화
  • 유형 선언
  • [PHP] abstract와interface의 차이점 사용 정리
  • PHP의interface와 abstract를 정확하게 이해하고 구분하여 사용하십시오
  • PHP 인터페이스 및 추상 클래스, 다중 상속, TRAIT 사용 방법
  • 완벽한 PHP
  • 통지하다


    우리와 함께 활약할 우수 인재를 모집하고 있습니다.
    관심 있는 사람은 반드시 참가해 주십시오파티 채택 페이지!
    Qita Jobs이사무사회사 내부시스템기획/개발팀, 사내 시스템 개발 엔지니어 모집!를 통해서도 채팅 질문이 가능합니다!

    내일/내일


    내일은 @ikuma_hayashi씨의'docker로 php+mecab 환경 구축(잠정)'입니다.

    좋은 웹페이지 즐겨찾기