Menu
Coddy logo textTech

Variable Scope

Coddy PHP 여정의 기초 섹션에 포함된 레슨 — 71개 중 67번째.

함수 내부에서 생성된 변수는 외부의 변수와 완전히 분리되어 있습니다. 이 개념을 변수 스코프라고 하며, 이를 이해하면 코드에서 혼란스러운 버그를 방지할 수 있습니다.

함수 내부에서 정의된 변수는 해당 함수 내에서만 존재합니다. 이를 지역 변수라고 합니다:

<?php
function sayHi() {
    $message = "Hello!";
    echo $message;
}

sayHi();
echo $message; // 오류: $message는 여기에서 존재하지 않습니다
?>

변수 $messagesayHi() 내부에서 생성되며, 함수가 종료되면 사라집니다. 외부에서 접근하려고 하면 오류가 발생합니다.

마찬가지로, 함수 밖에서 정의된 변수는 함수 안에서 자동으로 사용할 수 없습니다:

<?php
$name = "Alice";

function greet() {
    echo $name; // 오류: $name은 이 함수 안에서 정의되지 않았습니다
}

greet();
?>

메인 코드에 $name이 존재하더라도 함수는 이를 볼 수 없습니다. 함수에서 외부 값을 사용하려면 매개변수로 전달하세요—이미 배운 깨끗하고 권장되는 접근 방식입니다.

이 분리는 실제로 도움이 됩니다. 이는 함수가 프로그램의 다른 부분에서 변수들을 우연히 변경하지 않음을 의미하며, 코드를 더 예측 가능하고 디버깅하기 쉽게 만듭니다.

challenge icon

챌린지

쉬움

두 줄의 입력을 읽으세요:

  1. 사람의 이름 (예: Alice)
  2. 보너스 금액을 정수로 (예: 50)

두 개의 매개변수를 받는 calculateBonus라는 함수를 만드세요: $name (string) 및 $bonus (int).

함수 내부에서:

  • 로컬 변수 $baseSalary를 만들고 1000으로 설정하세요
  • $baseSalary$bonus를 더하여 총 급여를 계산하세요
  • 다음 형식의 문자열을 반환하세요: [name] earns [total]

입력 값으로 함수를 호출하고 반환된 결과를 출력하세요.

예제 1:

입력값이 Alice50인 경우, 출력은 다음과 같아야 합니다:

Alice earns 1050

예제 2:

입력값이 Bob200인 경우, 출력은 다음과 같아야 합니다:

Bob earns 1200

예제 3:

입력값이 Emma0인 경우, 출력은 다음과 같아야 합니다:

Emma earns 1000

치트 시트

함수 내부에서 생성된 변수는 지역 변수이며 해당 함수 내에서만 존재합니다. 이 개념을 변수 스코프라고 합니다.

함수 내부에서 정의된 변수는 그 외부에서 접근할 수 없습니다:

<?php
function sayHi() {
    $message = "Hello!";
    echo $message;
}

sayHi();
echo $message; // Error: $message doesn't exist here
?>

마찬가지로, 함수 외부에서 정의된 변수는 함수 내부에서 자동으로 사용할 수 없습니다:

<?php
$name = "Alice";

function greet() {
    echo $name; // Error: $name is not defined inside this function
}

greet();
?>

함수에서 외부 값을 사용하려면, 매개변수로 전달하세요.

직접 해보기

<?php
// 입력 읽기
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));

// TODO: 아래에 calculateBonus 함수 생성
// - $name (string)과 $bonus (int)를 매개변수로 받아야 함
// - $baseSalary 로컬 변수를 1000으로 설정
// - 총 급여 계산하고 "[name] earns [total]" 반환



// 함수 호출하고 결과 출력
echo calculateBonus($name, $bonus);
?>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨