__toString 및 __debugInfo
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 45번째.
__toString() method를 사용하면 object가 문자열로 어떻게 표현될지 define할 수 있습니다. 이는 echo 또는 문자열 연결처럼 문자열 컨텍스트에서 object를 사용할 때 자동으로 호출됩니다.
<?php
class User {
public function __construct(
private string $name,
private string $email
) {}
public function __toString(): string {
return $this->name . " (" . $this->email . ")";
}
}
$user = new User("Alice", "alice@example.com");
echo $user;
출력:
Alice (alice@example.com)__debugInfo() method는 객체에 var_dump()를 사용할 때 어떤 정보가 표시되는지 제어합니다. 이는 디버깅 중 민감한 데이터를 숨기거나 계산된 값을 표시할 때 유용합니다.
<?php
class BankAccount {
public function __construct(
private string $accountNumber,
private float $balance,
private string $pin
) {}
public function __debugInfo(): array {
return [
'accountNumber' => '****' . substr($this->accountNumber, -4),
'balance' => $this->balance,
'pin' => '[HIDDEN]'
];
}
}
$account = new BankAccount("1234567890", 1500.00, "9876");
var_dump($account);
출력:
object(BankAccount)#1 (3) {
["accountNumber"]=>
string(8) "****7890"
["balance"]=>
float(1500)
["pin"]=>
string(8) "[HIDDEN]"
}__debugInfo()가 기본 속성 덤프를 대체하는 키-값 쌍의 array를 반환한다는 점에 주목하세요. 민감한 PIN은 숨겨지고 account number는 일부가 마스킹됩니다. 안전한 디버깅에 안성맞춤입니다.
챌린지
쉬움__toString()와 __debugInfo() 매직 메서드를 모두 보여 주는 Credential 관리 시스템을 만들어 보겠습니다. 출력할 때 사용자에게 친숙한 정보를 표시하면서, 디버깅 중에는 민감한 데이터를 보호하는 class를 만들게 됩니다.
코드를 두 개의 파일로 구성합니다:
Credential.php: login 정보를 안전하게 저장하는Credentialclass를 만듭니다. 생성자 프로모션을 사용하여$username(string),$password(string),$lastLogin(string)에 대한 private properties를 정의합니다. 두 개의 매직 메서드를 Implement합니다:__toString(): 사용자에게 친숙한 문자열인"User: [username] (Last login: [lastLogin])"을 Return합니다. 문자열 표현에는 password가 절대 노출되지 않는다는 점에 유의하세요.__debugInfo():var_dump()를 위한 array를 Return합니다. username은 그대로 표시하고, password는"[PROTECTED]"만 표시하여 마스킹하며, last login 날짜는 일반적으로 표시합니다.
main.php: Credential 파일을 포함합니다. username, password, last login 날짜라는 세 가지 inputs를 받습니다. 이 값들로Credentialinstance를 만듭니다. 먼저 Credential object를 직접 echo합니다(이렇게 하면__toString()이 실행됩니다). 그런 다음 새 줄에서 object에var_dump()를 사용하여 protected debug output을 확인합니다.
__toString() method는 password를 노출하지 않고 Credential을 깔끔하고 안전하게 표시하는 방법을 제공합니다. __debugInfo() method는 디버깅 중에도 민감한 정보가 hidden 상태로 유지되도록 보장합니다. 이는 authentication data를 다룰 때 중요한 실천 방법입니다.
직접 해보기
<?php
require_once 'Credential.php';
// 입력 읽기
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$lastLogin = trim(fgets(STDIN));
// TODO: 입력 값으로 Credential 인스턴스 생성
// TODO: credential 객체를 echo ( __toString() 트리거)
// TODO: 객체에 var_dump()를 사용하여 보호된 디버그 출력 확인
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize복습 - 사용자 지정 컬렉션직접 연습해 보세요: 온라인 PHP 컴파일러