클로저와 'use'
Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 2번째.
기본적으로 익명 함수는 매개변수로 전달된 변수에만 접근할 수 있습니다. 하지만 클로저가 주변 범위(scope)의 변수에 접근해야 한다면 어떻게 해야 할까요? 이때 use 키워드가 사용됩니다.
use 키워드는 클로저가 부모 스코프에서 변수를 "캡처"하여 함수 내부에서 사용할 수 있게 해줍니다:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // 출력: Welcome, Bob!
?>$message가 함수 외부에서 정의되었지만, 매개변수 목록 뒤에 use ($message)를 포함함으로써 클로저가 해당 변수에 접근하고 사용할 수 있다는 점에 주목하세요. 쉼표로 구분하여 여러 변수를 캡처할 수 있습니다: use ($var1, $var2).
이 기능은 클로저를 훨씬 더 강력하게 만들어, 익명 함수의 유연성을 유지하면서도 주변 컨텍스트의 데이터를 활용할 수 있게 해줍니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움use 키워드를 사용하여 주변 스코프에서 할인율을 캡처하는 익명 함수를 생성하세요. 이 함수는 가격을 매개변수로 받아 할인을 적용한 후의 최종 가격을 반환해야 합니다.
할인율과 원래 가격이라는 두 개의 입력을 받게 됩니다. 두 입력을 모두 읽고, 할인율을 캡처하는 클로저를 생성한 다음, 가격을 인수로 하여 클로저를 호출하고 할인이 적용된 최종 가격을 출력하세요.
입력 형식: 두 줄 - 첫 번째 줄은 할인율(숫자), 두 번째 줄은 원래 가격(소수점을 포함할 수 있는 숫자)을 포함합니다.
예상 출력: 할인이 적용된 후의 최종 가격
치트 시트
use 키워드를 사용하면 클로저가 부모 스코프에서 변수를 캡처할 수 있습니다:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // 출력: Welcome, Bob!
?>쉼표로 구분하여 여러 변수를 캡처할 수 있습니다: use ($var1, $var2).
직접 해보기
<?php
// 입력 읽기
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: 'use'를 사용하여 할인율을 캡처하는 익명 함수 생성
// 이 함수는 가격 매개변수를 받아 할인이 적용된 최종 가격을 반환해야 함
// TODO: 가격과 함께 클로저를 호출하고 결과를 저장
// 최종 가격 출력
echo $finalPrice;
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.