함수(3)

minah moon·2023년 8월 4일

PHP

목록 보기
9/58
post-thumbnail

복합 데이터 타입을 인수, 반환값으로 사용하기

함수를 정의할 때, 매개변수를 작성할 수 있으므로 스칼라 데이터 타입으로 할지 복합 데이터 타입으로 할지를 정할 수 있다.

  • 스칼라 데이터 타입은 문자열, 숫자, 불리언과 같은 데이터 하나를 담는다.
  • 복합 데이터 타입은 여러 데이터를 담을 수 있다.

또한 함수는 하나의 작업만 수행해야 하지만 하나의 작업은 반환해야 하는 값으로 하나 이상의 값을 생성할 수 있다. 만약에 함수에서 하나 이상의 값을 반환하고자 한다면, 함수 안에서 배열이나 객체를 생성하고 그것을 반환해야 한다.함수는 하나의 스칼라 데이터 또는 복합 데이터만 반환할 수 있다.

PHP 인터프리터는 return 키워드로 시작하는 구문을 실행하자마자 함수 내의 코드 실행을 멈추고 그 함수를 호출했던 코드로 돌아간다. 함수 정의에 return 구문 다음으로 코드가 더 있다고 해도 실행되지 않는다.

<?php
$us_price = 4;
$rates = [
  'uk' => 0.81,
  'eu' => 0.93,
  'jp' => 113.21,
];
function calculate_prices($usd, $exchange_rates)
{
  $prices = [
    'pound' => $usd * $exchange_rates['uk'],
    'euro'  => $usd * $exchange_rates['eu'],
    'yen'   => $usd * $exchange_rates['jp'],
  ];
  return $prices;
}
$global_prices = calculate_prices($us_price, $rates);
?>
<!DOCTYPE html>
<html>
<head>
  <title>Functions with Parameters</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>
  <h1>The Candy Store</h1>
  <h2>Chocolates</h2>
  <p>US $<?= $us_price ?></p>
  <p>
    (UK &pound; <?= $global_prices['pound'] ?> | 
     EU &euro; <?= $global_prices['euro'] ?> | 
     JP &yen; <?= $global_prices['yen'] ?>)
  </p>
</body>
</html>

결과


인수와 반환 타입 선언

함수를 정의할 때, 각 인수의 데이터 타입과 함수가 반환해야 하는 데이터 타입을 지정할 수 있다.

function calculate_total(int $price, int $quantity): int
{
	return $price * $quantity;
}

위의 예시처럼 각 매개변수 이름 앞에 인수 타입이 지정되며, 콜론 다음에는 함수가 반환할 데이터 타입을 가리키는 반환 타입이 나온다.

인수와 반환 타입 선언에 사용되는 데이터 타입

  • string 문자열
  • int 정수(자연수)
  • float 부동 소수점 수(십진수)
  • bool 불리언(true 또는 false / 1 또는 0)
  • array 배열
  • className 객체의 클래스
  • mixed 위의 모든 데이터 타입의 혼합

인수 또는 반환 타입이 타입의 집합에 속한 것 중에 하나가 될 수 있음을 지정하는 유니온 타입.
각 타입은 파이프스템 기호인 | 로 구분된다.
ex. int | float 는 정수 또는 부동 소수점 수를 나타낸다.


엄격한 타입 활성화하기

함수 정의에 인수 및/또는 반환 타입 선언을 하면, 잘못된 데이터 타입을 사용하여 함수를 호출하거나 잘못된 데이터 타입을 반환할 때 PHP 인터프리터가 오류를 발생할 수 있다.

함수가 다음과 같은 경우일 때, 오류가 발생하도록 PHP 인터프리터에 엄격한 타입을 활성화하라고 지시할 수 있다.

  • 함수가 잘못된 데이터 타입을 인수로 사용하여 호출되는 경우(인수 타입 선언을 사용했을 때)
  • 함수가 잘못된 데이터 타입의 값을 반환하는 경우(반환 타입 선언을 사용했을 때)

이렇게 발생한 오류는 PHP 코드에서 문제의 원인을 추적할 수 있게 하지만, 다음의 declare 구조를 사용하여 함수를 호출하는 페이지의 타입을 확인하도록 PHP 인터프리터에 지시해야 한다.

declare(strict_types = 1);

이것은 페이지에서의 첫 번째 구문이어야 하며, 그 페이지에서 호출된 함수에 대해서만 엄격한 타입을 활성화할 수 있다.

예시

<?php
  declare(strict_types = 1);
  $price = 4;
  $quantity = 3;
  function calculate_total(int $price, int $quantity): int
  {
    return $price * $quantity;
  }
  $total = calculate_total($price, $quantity);
?>
<!DOCTYPE html>
<html>
  <head>
    <title>Functions with Parameters</title>
    <link rel="stylesheet" href="css/styles.css">
  </head>
  <body>
    <h1>The Candy Store</h1>
    <h2>Chocolates</h2>
    <p>Total $<?= $total ?></p>
  </body>
</html>

결과






출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022

0개의 댓글