PHP 8에는 새로운 Stringable 인터페이스가 도입되었습니다. 이 인터페이스는 더블 언더스코어(__)로 시작하는 매직 메서드인 __toString과 밀접하게 연관되어 있습니다.
__toString 메서드는 객체를 문자열 형태로 표현할 수 있도록 해주는 기능을 담당합니다. 클래스 내부에 __toString 메서드를 정의해 두면, 해당 객체가 문자열로 취급되어야 하는 상황이 발생할 때마다 PHP 엔진이 자동으로 이 메서드를 호출합니다.
예제 1: __toString 메서드를 활용한 Stringable 구현
<?php
class Employee {
public function __toString(): string
{
return 'Employee Name';
}
}
$employee = new Employee();
print_r((string)$employee);
?>실행 결과
Employee Name
Stringable 인터페이스의 핵심 특징
PHP 8에서 Stringable 인터페이스를 사용하면 문자열 전달이 훨씬 간편해집니다. 특히 주목할 점은, 클래스가 __toString 메서드만 구현하면 Stringable 인터페이스가 자동으로 추가된다는 것입니다. 따라서 개발자가 인터페이스를 명시적으로 implements 할 필요가 없습니다.
이러한 자동 구현 방식은 strict_types=1처럼 엄격한 타입 검사가 적용된 환경에서 타입 힌팅(type hinting)을 활용할 때 특히 유용합니다. 함수나 메서드의 매개변수에 Stringable 타입을 지정해 두면, __toString을 구현한 모든 객체를 안전하게 받아들일 수 있습니다.
예제 2: instanceof 연산자로 Stringable 확인하기
<?php
declare(strict_types=1);
class Employee {
public function __toString() {
return 'Employee Details';
}
}
$emp = new Employee;
var_dump($emp instanceof Stringable);
?>실행 결과
bool(true)
위 예제에서 볼 수 있듯이, Employee 클래스는 Stringable 인터페이스를 직접 상속받지 않았음에도 불구하고 __toString 메서드를 구현했기 때문에 instanceof Stringable 검사 결과가 true로 반환됩니다. 이것이 바로 PHP 8의 Stringable 인터페이스가 제공하는 자동 인식 메커니즘입니다.