이 저장소는 Refactoring.Guru 프로젝트의 일부입니다.
여기에는 모든 클래식 GoF 디자인 패턴에 대한 PHP 예제가 포함되어 있습니다.
각 패턴에는 두 가지 예가 포함됩니다.
개념적 예시는 자세한 설명을 포함하여 패턴의 내부 구조를 보여줍니다.
실제 사례는 실제 PHP 애플리케이션에서 패턴이 어떻게 사용될 수 있는지 보여줍니다.
이러한 예제에는 PHP 7.3 이상이 필요하지만 이전 버전의 PHP에서도 쉽게 복제할 수 있습니다.
이 버전은 동적 유형 언어에서 그다지 명확하지 않은 일부 패턴 기능을 더 잘 이해하는 데 도움이 되는 명시적 인수 및 반환 유형 선언을 제공합니다.
모든 예제는 다음과 같이 PHP 실행 파일을 사용하여 명령줄을 통해 시작할 수 있습니다.
php src/Path-to-example/index.php
최상의 경험을 위해서는 다음 IDE를 사용하여 예제를 작업하는 것이 좋습니다.
PHP 앱에서 이 두 가지의 실제 사용에 대한 적절한 아이디어가 없습니다. 프로젝트에 이를 사용한 적이 있다면 이슈를 게시하여 나에게 아이디어를 제안해 주세요.
클라이언트는 패턴의 일부로 정의된 클래스의 클라이언트를 의미하며, 이는 단지 주어진 메소드의 호출자이거나 주어진 클래스의 사용자입니다. 즉, 패턴의 클래스를 사용하는 애플리케이션 코드의 일부입니다.
먼저 개념적인 예를 살펴보세요. 여기서는 각 클래스의 패턴, 역할, 다른 클래스와의 연결에 대한 자세한 설명을 찾을 수 있습니다.
간단한 오타 수정이든 완전히 새로운 예이든 도움을 주시면 감사하겠습니다. 포크를 만들고 변경한 후 끌어오기 요청을 제출하면 됩니다.
다음은 변경 사항을 프로젝트 코드의 나머지 부분과 일관되게 유지하는 데 도움이 될 수 있는 스타일 가이드입니다.
모든 코드는 PSR2 코딩 스타일 가이드와 일치해야 합니다.
80번째 문자로 코드를 하드 래핑해 보세요. 스크롤바 없이 웹사이트에 코드를 나열하는 데 도움이 됩니다.
예시는 RefactoringGuru{pattern-name}{example-name} 네임스페이스 규칙과 일치해야 합니다. 예를 들어:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
모든 코드를 하나의 파일에 넣는 것을 목표로 하세요. 예, 프로덕션에서는 이러한 작업이 수행되어야 하는 방식이 아니라는 것을 알고 있습니다. 그러나 모든 코드가 한 화면에 들어가므로 사람들이 예제를 더 잘 이해하는 데 도움이 됩니다.
댓글에는 다음과 같이 언어 태그가 있을 수도 있고 없을 수도 있습니다.
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
이 표기법은 웹 사이트가 나열된 모든 언어에 대한 별도의 예제 버전을 생성할 수 있도록 하면서 코드를 한 곳에 유지하는 데 도움이 됩니다. 겁내지 말고 그러한 댓글에서 영어가 아닌 부분을 무시하십시오. 이런 댓글에서 뭔가를 바꾸고 싶다면 그렇게 하세요. 잘못하신 경우에도 Pull Request 시 수정 방법을 알려드리겠습니다.
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 라이선스가 부여됩니다.
작성자: Alexander Shvets(@neochief) 및 Alexey Pyltsyn(@lex111)