マジックメソッドの概要
__toString、__get、__setなど、PHPのマジックメソッドを学びます
「マジックメソッドの概要」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
はじめに:PHPのマジックメソッド
マジックメソッドは、2つのアンダースコアで始まる特殊な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時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「マジックメソッドの概要」で何を学びますか?
__toString、__get、__setなど、PHPのマジックメソッドを学びます ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「マジックメソッドの概要」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- クラス、プロパティ、メソッド
- コンストラクタとデストラクタ
- 静的プロパティとメソッド
- マジックメソッドの概要