요약 - 학생 기록 시스템
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 43번째.
챌린지
쉬움이 장에서 배운 모든 캡슐화 개념을 통합하는 학생 기록 시스템(Student Records System)을 구축해 보겠습니다. 생성자 프로모션(constructor promotion), private 속성, 유효성 검사가 포함된 getter 및 setter, 그리고 정보 은닉을 사용하여 학생 데이터를 안전하게 관리하는 잘 조직된 시스템을 만들 것입니다.
코드는 다음 세 개의 파일로 구성됩니다:
Student.php— 생성자 프로모션을 사용하여 private$name(string)과 private$studentId(string)를 가지는Student클래스를 생성하세요. 또한 private$grades배열 속성(빈 배열로 초기화됨)을 포함하세요. 학생 클래스는 다음을 포함해야 합니다:getName()— 학생의 이름을 반환합니다.getStudentId()— 학생 ID를 반환합니다.addGrade(int $grade)— 성적이 0에서 100 사이(포함)인 경우에만 성적을 추가합니다.getAverage()— 모든 성적의 평균을 float로 반환합니다 (성적이 없으면 0.0을 반환합니다).getGradeCount()— 기록된 성적의 개수를 반환합니다.
Classroom.php— 학생 컬렉션을 관리하는Classroom클래스를 생성하세요. 학생들을 저장하기 위해 private 배열을 사용하세요. Student 파일을 포함(include)해야 합니다. 강의실 클래스는 다음을 포함해야 합니다:- 생성자 프로모션을 사용하여 private
$roomName(string)을 받는 생성자 addStudent(Student $student)— 강의실에 학생을 추가합니다.getStudentCount()— 등록된 학생 수를 반환합니다.getClassAverage()— 모든 학생의 평균 점수에 대한 평균을 계산합니다 (학생이 없거나 성적이 없으면 0.0을 반환합니다).getRoomName()— 강의실 이름을 반환합니다.
- 생성자 프로모션을 사용하여 private
main.php— Classroom 파일을 포함하세요. 강의실 이름, 학생 이름, 학생 ID, 그리고 두 개의 성적 값까지 총 다섯 개의 입력을 받게 됩니다. 강의실 이름으로Classroom객체를 생성하세요. 이름과 ID로Student객체를 생성하고, 두 성적을 (정수로 변환하여) 추가한 다음, 해당 학생을 강의실에 추가하세요. 다음 네 줄을 출력하세요:- 강의실 이름
- 학생의 이름 뒤에 소수점 1자리까지 형식화된 평균 점수:
"[name]: [average]" - 해당 학생의 성적 개수
- 소수점 1자리까지 형식화된 강의실 평균
이 시스템은 적절한 캡슐화를 보여줍니다. 성적은 직접적인 조작으로부터 보호되고, 평균은 원본 데이터를 노출하지 않고 내부적으로 계산되며, 모든 데이터는 제어된 메서드를 통해 흐릅니다. 강의실은 학생이 평균을 어떻게 계산하는지 알 필요가 없으며, 단지 그 결과만 요청할 뿐입니다.
직접 해보기
<?php
require_once 'Classroom.php';
// 입력 읽기
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: 강의실 이름으로 Classroom 객체 생성
// TODO: 이름과 ID로 Student 객체 생성
// TODO: 학생에게 두 성적을 모두 추가
// TODO: 학생을 강의실에 추가
// TODO: 강의실 이름 출력
// TODO: 학생의 이름과 소수점 첫째 자리까지 형식화된 평균 점수 출력: "[name]: [average]"
// TODO: 해당 학생의 성적 개수 출력
// TODO: 강의실 평균 점수를 소수점 첫째 자리까지 형식화하여 출력
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션