PHP

abstract

수업소개

abstract는 클래스의 메소드를 하위 클래스가 반드시 오버라이드 하도록 하는 것입니다. 이것을 통해서 부모 클래스의 일부 기능을 하위 클래스가 구현하도록 강제할 수 있습니다. 

이 수업에서는 디자인 패턴이 무엇인가를 설명합니다. 그 중에서 템플릿 메소드 패턴을 통해서 추상 클래스가 사용되는 구체적인 사례를 살펴봅니다. 

수업

소개

형식

 

<?php
abstract class ParentClass
{
    public function a()
    {
        echo 'a';
    }
    public abstract function b();
}
class ChildClass extends ParentClass
{
    public function b()
    {
        
    }
}

 

사례 : 템플릿 메소드 패턴

템플릿 메소드 패턴 구현

 

<?php
abstract class AbstractPageTemplate
{
    protected final function template()
    {
        $result = $this->header();
        $result .= $this->article();
        $result .= $this->footer();
        return $result;
    }
    protected abstract function header();
    protected abstract function article();
    protected abstract function footer();
    public function render()
    {
        return $this->template();
    }
}
class TextPage extends AbstractPageTemplate
{
    protected function header()
    {
        return "PHP\n";
    }
    protected function article()
    {
        return "PHP: Hypertext Preprocessor\n";
    }
    protected function footer()
    {
        return "website is php.net\n";
    }
}
class HtmlPage extends AbstractPageTemplate
{
    protected function header()
    {
        return "<header>PHP</header>\n";
    }
    protected function article()
    {
        return "<article>PHP: Hypertext Preprocessor</article>\n";
    }
    protected function footer()
    {
        return "<footer>website is php.net</footer>\n";
    }
    public function render()
    {
        $result = '<html>';
        $result .= $this->template();
        return $result.'</html>';
    }
}
echo '<h1>text</h1>';
$text = new TextPage();
echo $text->render();

echo '<h1>html</h1>';
$html = new HtmlPage();
echo $html->render();

 

댓글

댓글 본문
작성자
비밀번호
  1. 코코딩
    php 에서는

    var num = '';
    num += 123;

    += 연산자를

    $num = '';
    num .= 123;

    .= 이렇게 쓰는군요.

    밑에 이고잉님 설명도 있었는데
    한참 보고 뭔가.. 했네요 : )
  2. 감사합니다. 여러 번 다시 읽어보니 이해가 됩니다.
  3. spacepublisher
    잘봤습니다-

    협업의 입장에서 바라본다면,
    인터페이스는 작업을 비슷한 수준의 개발자가 병렬적으로 찢어놓는데에 유리하다면,
    앱스트랙트는 작업을 사수-부사수처럼 책임과 실력이 비대칭인 상황에서 유리하겠네요.
  4. dufuqsls
    잘봣습니다.
  5. 고맙습니다~
  6. egoing
    $result .= $this->template();

    $result = $result.$this->template();
    와 같은 의미입니다~
    대화보기
    • 이고잉님!실습하던 중 처음부터 막혀버렸습니다. 변수 result에 차례대로 값을 여러번 넣으면 결국 마지막 입력값만 출력하게되던데.. 원래 변수는 이렇게 나오는거 아닌가요? ㅠㅠ이고잉님껀 차례대로 합쳐져서 다 나오던데,, 대체 뭐가다른가요? ㅜㅜ하.. ㅠ
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기