役立つ情報
登録日: 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; // エラー発生

Copyright 役立つ情報.net