PHP OOP의 마법 메소드 __toString
우리가 배울 첫 번째 마법 메소드는 __toString입니다. 이 메소드는 클래스 인스턴스를 문자열로 변환하려고 할 때 호출됩니다. 이게 무슨 뜻인지 알아봅시다. 다음과 같은 User 클래스가 있다고 가정해 보겠습니다:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
이 클래스의 객체를 생성해 보겠습니다:
<?php
$user = new User('john', 25);
?>
이제 생성된 객체를 echo로 출력해 보려고 합니다:
<?php
$user = new User('john', 25);
echo $user;
?>
echo로 객체를 출력하려는 시도는 문자열로의 변환입니다. 이 경우 PHP는 객체가 그냥 문자열로 변환되지 않기 때문에 오류를 발생시킬 것입니다.
오류를 제거하려면 객체를 문자열로 변환하려 할 때 PHP가 무엇을 해야 하는지 명시적으로 알려주어야 합니다. 이를 위해 마법 메소드 __toString가 존재합니다.
우리 클래스 코드에 이러한 메소드를 만들면, 이 메소드의 결과(즉, return을 통해 반환하는 것)가 객체의 문자열 표현이 됩니다.
echo로 객체를 출력하려 할 때 사용자의 이름이 출력되기를 원한다고 가정해 봅시다. 따라서 __toString 메소드를 만들고 그 안에 name 속성의 값을 반환하도록 합니다:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// 지정된 메소드를 구현합니다:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
확인해 봅시다:
<?php
$user = new User('john', 25);
echo $user; // 'john'을 출력합니다 - 모두 작동합니다!
?>
name와 surn 속성을 가진 User 클래스를 만드세요.
echo를 통해 객체를 출력할 때 사용자의 이름과 성이 포함된 문자열이 화면에 표시되도록 하세요.