복습 - 학생 기록 시스템
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 43번째.
챌린지
쉬움이 장에서 배운 모든 캡슐화 개념을 하나로 모은 Student Records System을 만들어 보겠습니다. constructor promotion, private 프로퍼티, 검증 기능이 있는 getter와 setter, 정보 은닉을 사용하여 학생 데이터를 안전하게 관리하는 체계적으로 구성된 시스템을 만들게 됩니다.
코드를 세 개의 파일로 구성합니다:
Student.php: private$name(string)과 private$studentId(string)에 constructor promotion을 사용하는Studentclass를 Create합니다. 또한 private$gradesarray 프로퍼티도 포함합니다(값은 empty로 initialized). Student에는 다음 기능이 있어야 합니다:getName(): 학생의 이름을 반환합니다getStudentId(): 학생 ID를 반환합니다addGrade(int $grade): 0에서 100 사이(between, 양 끝값 inclusive)인 경우에만 grade를 추가합니다getAverage(): 모든 grades의 평균을 float로 반환합니다(grades가 없으면 0.0을 반환)getGradeCount(): 기록된 grades의 number를 반환합니다
Classroom.php: 학생들의 컬렉션을 관리하는Classroomclass를 Create합니다. students를 저장하기 위해 private array를 사용합니다. Student 파일을 포함합니다. Classroom에는 다음 기능이 있어야 합니다:- constructor promotion을 사용하여 private
$roomName(string)을 받는 constructor addStudent(Student $student): classroom에 학생을 추가합니다getStudentCount(): enrolled students의 number를 반환합니다getClassAverage(): 모든 students의 averages의 평균을 calculates합니다(students가 없거나 grades가 없으면 0.0을 반환)getRoomName(): classroom 이름을 반환합니다
- constructor promotion을 사용하여 private
main.php: Classroom 파일을 포함합니다. 다섯 개의 inputs를 받습니다: 방 이름, 학생 이름, 학생 ID, 그리고 두 개의 grade 값입니다. 방 이름으로Classroom을 Create합니다. 이름과 ID로Student를 Create하고, 두 grades를 (int로 변환하여) 추가한 다음 학생을 classroom에 추가합니다. 네 줄을 Print합니다:- 방 이름
- 학생의 이름 뒤에 1 decimal place로 formatted된 평균:
"[name]: [average]" - 해당 학생의 grades number
- 1 decimal place로 formatted된 class 평균
이 시스템은 적절한 캡슐화를 보여 줍니다. grades는 직접 조작하지 못하도록 보호되고, 원시 데이터를 노출하지 않고 averages가 내부적으로 계산되며, 모든 데이터 흐름은 제어된 메서드를 거칩니다. classroom은 students가 averages를 어떻게 calculates하는지 알 필요가 없습니다. 단지 결과를 요청하면 됩니다.
직접 해보기
<?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: 학생 이름 뒤에 소수점 1자리로 포맷된 평균을 출력: "[name]: [average]"
// TODO: 해당 학생의 성적 수 출력
// TODO: 소수점 1자리로 포맷된 학급 평균 출력
?>객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러