要するに、いいえ。
__get()
および__set()
インスタンスメソッドです。stdClass()
これらは本質的に、インスタンスであるを構成する関数です。
この方法で静的コンテンツを設定する必要がある場合は、クラスに stdClass パラメータと、魔法のようにデータを設定および取得できるシングルトン構造を与えることができます。
例えば:
class UserData {
protected static $_instance;
protected $_data = array();
public static function get_instance() {
static $initialized = FALSE;
if ( ! $initialized) {
self::$_instance = new UserData;
$initialized = TRUE;
}
return self::$_instance;
}
public function __get($var) {
$self = self::get_instance();
return isset($self->_data[$var]) ? $self->_data[$var] : NULL;
}
public function __set($var, $val) {
$self = self::get_instance();
$self->_data[$var] = $val;
}
}
次に、次のように移動できます。
$UserData =& UserData::get_instance();
$UserData->var = 'val';
echo $UserData->var; // prints 'val'
ただし、PHP でシングルトンを使用することはお勧めしません。無意味だからです。PHP シングルトン クラスのベスト プラクティスの投稿で、いくつかの理由を読むことができます。
静的クラスまたはインスタンス クラスのいずれかを使用します。
魔法のゲッターとセッターはショートカットです。通常のセッターとゲッターで同じ動作を実装できます。以下の例は同じ機能を提供しますが、意図はより明確です。
class UserData {
protected $id, $name, $login;
public static function set_name($name) {
self::$name = $name;
}
public static function set_login($login) {
self::$login = $login;
}
public static function get_id() {
return self::$id;
}
public static function get_name() {
return self::$name;
}
public static function get_login() {
return self::login;
}
}
上記のコードで $id が書き込み可能でないことに注意してください。読み取り専用です。$name と $login は読み書き可能です。通常のセッターとゲッターを使用して読み取りと書き込みを制御する方が簡単で、バグも少なくなります。魔法のメソッドはまさに魔法であり、通常、魔法は具体的ではなく、コードでは理解しにくいものです。
最後に言いたいのは、なぜ UserData が静的なのかということです。コード全体でユーザーが 1 人しかいない場合を除き、コードを静的にする意味はありません。おそらく私は全体像を把握していませんが、複数のインスタンスを持つことができるように、ID と名前を持つものをインスタンス化する必要があります。それ以外の場合、クラス自体が一意であるため、ID を持っているのはなぜですか。