Menu
Coddy logo textTech

복습 - 체계적인 프로젝트

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 14번째.

challenge icon

챌린지

쉬움

적절한 namespace 구성으로 완전한 블로그 애플리케이션을 만들어 보겠습니다. namespace, use keyword, PSR-4 autoloading에 대해 지금까지 배운 모든 내용을 하나로 결합합니다.

실제 PHP 애플리케이션이 코드를 구성하는 방식을 보여 주는 5개의 파일로 잘 구조화된 프로젝트를 만들게 됩니다.

  • src/Models/Author.php: Blog\Models namespace에 Author class를 정의합니다. public $name property, 이름을 accepts하고 설정하는 constructor, 그리고 "Author: [name]"을 반환하는 getBio() method가 있어야 합니다.
  • src/Models/Post.php: Blog\Models namespace에 Post class를 정의합니다. public $titlepublic $author properties가 있어야 하며, author는 Author object입니다. constructor는 title과 Author object를 accepts하고 둘 다 설정합니다. "[title] by [author name]"을 반환하는 getSummary() method를 추가합니다.
  • src/Services/Publisher.php: Blog\Services namespace에 Publisher class를 정의합니다. Post object를 accepts하고 "Published: [post title]"을 반환하는 publish(Post $post) method가 있어야 합니다. Post class가 다른 namespace에 있으므로 use keyword를 사용해 Import해야 합니다.
  • vendor/autoload.php: Blog\ namespace prefix를 src/ directory에 매핑하는 spl_autoload_register를 사용해 PSR-4 autoloader를 만듭니다. 이 하나의 autoloader가 모든 class의 로딩을 자동으로 처리합니다.
  • index.php: entry point입니다. autoloader를 Require한 다음, use keyword를 사용해 Blog\Models\Author, Blog\Models\Post, Blog\Services\Publisher를 Import합니다. "Jane Smith" named Author, 해당 author를 사용하고 title이 "Getting Started with PHP"Post, 그리고 Publisher를 Create합니다. author의 bio, post의 summary, post를 publishing한 결과를 Print합니다(각각 한 줄씩).

Publisher service가 Post model에 의존한다는 점에 주목하세요. 이는 서로 다른 namespace의 class가 use statements를 사용해 필요한 것을 Import함으로써 함께 작동할 수 있음을 보여 줍니다.

직접 해보기

<?php
// 오토로더를 불러옵니다
require_once 'vendor/autoload.php';

// TODO: 'use' 문을 사용하여 필요한 클래스를 가져오세요
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher

// TODO: "Jane Smith"라는 이름의 Author를 생성하세요

// TODO: Create a Post with title "Getting Started with PHP" using that author

// TODO: Publisher를 생성하세요

// TODO: 작성자의 bio를 출력하세요

// TODO: 게시물의 요약을 출력하세요

// TODO: 게시물 발행 결과를 출력하세요
?>

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러