매직 메서드 개요
__toString, __get, __set 및 기타 PHP 매직 메서드를 학습합니다.
매직 메서드 개요은(는) CoddyKit의 무료 PHP Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 PHP Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
소개: PHP 마법 메서드
마법 메서드는 이중 밑줄 접두사로 시작하며, 특정 상황에서 PHP 엔진이 자동으로 호출하는 특수한 PHP 메서드입니다. 마법 메서드를 사용하면 객체 동작에 개입할 수 있습니다.
핵심 개념
PHP 마법 메서드의 핵심 개념:
__toString()— 객체를 문자열로 변환합니다__get/__set/__isset/__unset— 프로퍼티 접근을 가로챕니다__call/__callStatic— 메서드 호출을 가로챕니다__invoke()— 호출 가능한 객체입니다
__toString
예시:
<?php
class Money {
public function __construct(
private float $amount,
private string $currency
) {}
public function __toString(): string {
return number_format($this->amount, 2) . ' ' . $this->currency;
}
}
$price = new Money(9.99, 'USD');
echo $price; // 9.99 USD
echo 'Price: ' . $price; // Price: 9.99 USD__get 및 __set
이어서:
<?php
class DynamicObject {
private array $data = [];
public function __get(string $name): mixed {
return $this->data[$name] ?? null;
}
public function __set(string $name, mixed $value): void {
$this->data[$name] = $value;
}
}
$obj = new DynamicObject();
$obj->name = 'Alice';
echo $obj->name; // Alice__isset 및 __unset
연습:
<?php
class Model {
private array $attributes = [];
public function __set(string $k, mixed $v): void { $this->attributes[$k] = $v; }
public function __get(string $k): mixed { return $this->attributes[$k] ?? null; }
public function __isset(string $k): bool { return isset($this->attributes[$k]); }
public function __unset(string $k): void { unset($this->attributes[$k]); }
}
$m = new Model();
$m->email = 'a@b.com';
var_dump(isset($m->email)); // true
unset($m->email);
var_dump(isset($m->email)); // false__call 및 __callStatic
더 깊이 알아보기:
<?php
class FluentQuery {
private array $clauses = [];
public function __call(string $name, array $args): static {
$this->clauses[$name] = $args[0] ?? null;
return $this;
}
public function toSql(): string {
return 'SELECT * FROM '
. ($this->clauses['from'] ?? 'unknown');
}
}
echo (new FluentQuery())->from('users')->toSql();
// SELECT * FROM users__invoke
고급 사용법:
<?php
class Multiplier {
public function __construct(private float $factor) {}
public function __invoke(float $value): float {
return $value * $this->factor;
}
}
$double = new Multiplier(2);
echo $double(5); // 10
echo $double(21); // 42
$funcs = [new Multiplier(2), new Multiplier(3)];
foreach ($funcs as $fn) echo $fn(4) . ' '; // 8 12__clone
실무 패턴:
<?php
class Config {
private array $data = [];
public function set(string $k, mixed $v): self {
$this->data[$k] = $v;
return $this;
}
public function __clone() {
// deep clone nested objects if needed
}
}
$original = (new Config())->set('theme', 'dark');
$copy = clone $original; // triggers __clone__debugInfo
권장 사항:
<?php
class ApiClient {
public function __construct(
private string $baseUrl,
private string $apiKey // sensitive!
) {}
public function __debugInfo(): array {
return [
'baseUrl' => $this->baseUrl,
'apiKey' => '***' . substr($this->apiKey, -4), // mask key
];
}
}
var_dump(new ApiClient('https://api.example.com', 'secret123'));
// Shows masked key실용 패턴
PHP 마법 메서드에 적용할 실용 패턴으로 지금까지 배운 내용을 종합합니다.
흔한 문제
PHP 마법 메서드를 사용할 때 다음과 같은 흔한 실수를 피하십시오:
- 객체가 의미 있게 출력되도록 __toString()을 사용하십시오
- __get/__set으로 프록시 및 데코레이터 패턴을 구현할 수 있습니다
- __invoke를 사용하면 객체를 호출 가능한 객체로 만들 수 있습니다(array_map과 함께 사용하면 유용합니다)
- __debugInfo를 사용하면 민감한 데이터가 var_dump에 나타나는 것을 방지할 수 있습니다
빠른 확인
PHP 객체를 함수처럼 호출할 수 있게 만드는 마법 메서드는 무엇입니까?
복습: PHP 마법 메서드
PHP 마법 메서드를 학습했습니다. 기억해야 할 핵심 내용은 다음과 같습니다:
- 객체가 의미 있게 출력되도록 __toString()을 사용하십시오
- __get/__set으로 프록시 및 데코레이터 패턴을 구현할 수 있습니다
- __invoke를 사용하면 객체를 호출 가능한 객체로 만들 수 있습니다(array_map과 함께 사용하면 유용합니다)
- __debugInfo를 사용하면 민감한 데이터가 var_dump에 나타나는 것을 방지할 수 있습니다
자주 묻는 질문
“매직 메서드 개요” 강의는 무료인가요?
네 — “매직 메서드 개요” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 PHP Academy 강의 전체를 잠금 해제할 수 있습니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“매직 메서드 개요”에서 뭘 배우나요?
__toString, __get, __set 및 기타 PHP 매직 메서드를 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
PHP Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 PHP Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“매직 메서드 개요” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 PHP Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 PHP Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 클래스, 속성 및 메서드
- 생성자 및 소멸자
- 정적 속성 및 메서드
- 매직 메서드 개요