PHP의 타입 선언은 함수 인자, 반환값, 클래스 속성에 대해 런타임에 타입 단언을 제공해요.
함수에는 void 반환 타입을 추가해서 함수가 아무 값도 반환하지 않는다는 것을 나타낼 수 있어요.
선언된 타입은 함수가 적절한 타입의 응답을 반환하는지 런타임에 단언하는 역할도 해요.
<?php
class Driver
{
private int $serial_number;
public function setSerialNumber(int $number): void
{
$this->serial_number = $number;
}
public function getSerialNumber(): int
{
return $this->serial_number;
}
}
$driver = new Driver();
$driver->setSerialNumber("Version 1b"); // This will throw a TypeError
함수 인자, 반환값, 클래스 속성이 둘 이상의 타입이 될 수 있다면 타입 유니언을 선언할 수 있어요.
<?php
class IdentityCard
{
private int|null $id = null;
public function assign(int|float $id): void
{
$this->id = intval($id);
}
}
$card = new IdentityCard();
$card->assign(5.0);
코드를 다루다 보면 타입을 지정할 수 없을 때도 있어요.
PHP 8.0부터는 mixed라는 탈출구 타입이 제공돼요.
Mixed 타입은 object|resource|array|string|float|int|bool|null의 타입 유니언과 같아요.
시청에서 일한 지도 꽤 됐고, 그동안 양식 작성 같은 일상 업무를 훨씬 빠르게 해 주는 도구들을 만들어 왔어요.
그런데 새 동료가 합류하게 되면서, 도구들이 그만큼 직관적이지는 않을 수도 있겠다는 생각이 들었어요. 사무실에는 이상한 관행이 많아요. 양식을 항상 대문자로 작성한다든지, 필드를 비워 두지 않는다든지 하는 식이죠.
그래서 첫 단계로, 새 동료가 곧바로 뛰어들어 도구를 사용할 수 있도록 PHP 타입 선언을 추가하기로 했어요.
Address 클래스의 타입을 선언해요Address 클래스에 선언된 각 프로퍼티에 프로퍼티 타입 선언을 추가해요.
각 클래스 프로퍼티는 문자열로 선언해야 해요.
Form 클래스의 blanks 메서드에 매개변수 타입 선언과 반환 타입 선언을 추가해요.
이 메서드는 정수 길이를 받고, 빈 줄을 나타내는 문자열을 반환해야 해요.
Form 클래스의 letters 메서드에 매개변수 타입 선언과 반환 타입 선언을 추가해요.
이 메서드는 단어를 나타내는 문자열을 받고, 글자 배열을 반환해야 해요.
Form 클래스의 checkLength 메서드에 매개변수 타입 선언들과 반환 타입 선언을 추가해요.
이 메서드는 단어를 나타내는 문자열과 최대 길이를 나타내는 정수를 받고, true 또는 false 값을 반환해야 해요.
앞서 수정한 Address 클래스를 활용하는 매개변수 타입 선언과 반환 타입 선언을 Form 클래스의 formatAddress 메서드에 추가해요.
이 메서드는 Address를 받고, 형식이 지정된 문자열을 반환해야 해요.
Exercism에 가입하고 PHP 트랙을 개념 11개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.