登録日:
2025-02-05
最終更新日:
2025-03-07
php の getter と setter について
PHPのgetterとsetterは、クラスのプロパティ(メンバ変数)へのアクセスを制御するためのメソッドです。直接プロパティを操作せず、メソッドを介して値を取得・設定することで、データの整合性やカプセル化を保つことができます。
基本的な書き方
class User {
private $name; // プロパティは private にする
// コンストラクタ
public function __construct($name) {
$this->name = $name;
}
// ゲッター (値を取得するメソッド)
public function getName() {
return $this->name;
}
// セッター (値を設定するメソッド)
public function setName($name) {
// 例えば、空文字を許可しないようにバリデーションを追加できる
if (!empty($name)) {
$this->name = $name;
}
}
}
// 使用例
$user = new User("Alice");
echo $user->getName(); // Alice
$user->setName("Bob");
echo $user->getName(); // Bob
__get() と __set() を使った方法
PHP ではマジックメソッド __get() と __set() を使って、プロパティの取得・設定を統一的に処理できます。
class User {
private $data = [];
public function __get($name) {
return isset($this->data[$name]) ? $this->data[$name] : null;
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
// 使用例
$user = new User();
$user->name = "Alice"; // __set() が呼ばれる
echo $user->name; // __get() が呼ばれる -> Alice
ただし、__get() や __set() はデバッグしにくく、IDE の補完も効かないことがあるため、明示的な getXxx() / setXxx() メソッドを使うのが一般的です。
プロパティのオーバーロード(__get() / __set() の活用例)
例えば、データベースのレコードをオブジェクトとして扱う場合などに役立ちます。
class Person {
private $attributes = [];
public function __get($key) {
return $this->attributes[$key] ?? "未設定";
}
public function __set($key, $value) {
if ($key === "age"
}
$this->attributes[$key] = $value;
}
}
// 使用例
$person = new Person();
$person->name = "Alice";
$person->age = 25;
echo $person->name; // Alice
echo $person->age; // 25
// $person->age = -5; // エラー発生