
함수를 정의할 때, 매개변수를 작성할 수 있으므로 스칼라 데이터 타입으로 할지 복합 데이터 타입으로 할지를 정할 수 있다.
- 스칼라 데이터 타입은 문자열, 숫자, 불리언과 같은 데이터 하나를 담는다.
- 복합 데이터 타입은 여러 데이터를 담을 수 있다.
또한 함수는 하나의 작업만 수행해야 하지만 하나의 작업은 반환해야 하는 값으로 하나 이상의 값을 생성할 수 있다. 만약에 함수에서 하나 이상의 값을 반환하고자 한다면, 함수 안에서 배열이나 객체를 생성하고 그것을 반환해야 한다.함수는 하나의 스칼라 데이터 또는 복합 데이터만 반환할 수 있다.
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 £ <?= $global_prices['pound'] ?> | EU € <?= $global_prices['euro'] ?> | JP ¥ <?= $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