요약 - 커스텀 컬렉션
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 50번째.
챌린지
쉬움이 장에서 배운 모든 매직 메서드들을 하나로 모으는 Collection 클래스를 만들어 봅시다. 여러분의 컬렉션은 키별로 항목을 저장하고, 존재 여부를 확인하며, 동적으로 항목을 찾고, 독립적인 복사본을 생성하는 등 사용하기 자연스러운 유연한 데이터 컨테이너 역할을 하게 될 것입니다.
코드는 두 개의 파일로 구성됩니다:
Collection.php— 항목을 프라이빗 배열에 저장하는Collection클래스를 생성하세요. 여러분의 컬렉션은 다음과 같은 매직 메서드들이 함께 작동하도록 지원해야 합니다:__construct()— 초기 항목들로 구성된 선택적 배열을 받습니다 (기본값은 빈 배열)__get($key)— 주어진 키에 해당하는 항목을 반환하거나, 존재하지 않으면null을 반환합니다__set($key, $value)— 주어진 키에 값을 저장합니다__isset($key)— 컬렉션에 해당 키가 존재하는지 여부를 반환합니다__unset($key)— 주어진 키의 항목을 제거합니다__call($method, $args)— 동적 파인더 메서드를 처리합니다.findBy로 시작하는 메서드(예:findByRole또는findByStatus)가 호출되면, 필드 이름("findBy" 뒷부분을 소문자로 변환)을 추출하고 모든 항목을 검색하여 해당 필드가 첫 번째 인자와 일치하는 첫 번째 항목의 키를 반환합니다. 일치하는 항목이 없으면null을 반환합니다. 그 외의 다른 메서드에 대해서는"Unknown method: [method]"를 반환합니다.__toString()—"Collection([count] items)"형식을 반환하며, 여기서 count는 항목의 개수입니다__clone()— 복제될 때, items 배열은 원본에 대한 참조가 아닌 새로운 복사본이어야 합니다
main.php— Collection 파일을 포함합니다. 키 이름, 역할(role) 값, 검색할 역할 등 세 가지 입력을 받게 됩니다. 사용자 컬렉션을 구축하고 모든 매직 메서드를 시연하세요:- 새로운
Collection을 생성합니다 - 입력받은 키를 사용하여 사용자를 추가합니다. 이때
"name"은 해당 키로,"role"은 입력받은 역할 값으로 설정된 배열을 저장합니다 - 키가
"bob"인 또 다른 사용자를 추가하고,["name" => "Bob", "role" => "editor"]를 저장합니다 isset()을 사용하여 입력받은 키가 존재하는지 출력합니다 —"exists"또는"missing"을 출력합니다- 검색할 역할을 인자로 하여 동적
findByRole()메서드를 호출한 결과를 출력합니다 (일치하는 사용자의 키를 반환해야 하며, null인 경우 아무것도 출력하지 않습니다) echo를 사용하여 컬렉션을 출력합니다 (__toString이 트리거됩니다)- 컬렉션을 복제(clone)한 다음, 복제본에서 입력받은 키를 제거(unset)합니다
- 원본 컬렉션에 입력받은 키가 존재하는지 출력합니다 —
"exists"또는"missing"을 출력합니다 (복제본은 독립적이므로 원본에는 여전히 존재해야 합니다)
- 새로운
각 출력은 개별 줄에 표시되어야 합니다. 동적 파인더는 컬렉션의 각 항목이 "name" 및 "role"과 같은 필드를 가진 연관 배열이라고 가정합니다.
직접 해보기
<?php
require_once 'Collection.php';
// 입력 읽기
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));
// TODO: 새로운 Collection 생성
// TODO: 입력받은 키를 사용하여 사용자 추가, "name" => key 및 "role" => roleValue 배열 저장
// TODO: 키 "bob"으로 다른 사용자 추가, ["name" => "Bob", "role" => "editor"] 저장
// TODO: isset()을 사용하여 입력 키의 존재 여부 출력 - "exists" 또는 "missing" 출력
// TODO: searchRole을 인자로 하여 findByRole() 호출 결과 출력
// TODO: echo를 사용하여 컬렉션 출력 (__toString 트리거)
// TODO: 컬렉션을 복제(clone)한 후, 복제본에서 입력 키를 unset
// TODO: 원본 컬렉션에 입력 키가 존재하는지 여부 출력 - "exists" 또는 "missing"
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션