ここに、参照マジック __get によるリターンを使用したサンプル スクリプトがあります。
class a{
public $_attributes = array();
function &__get($k){
if(isset($this->_attributes[$k])){
return $this->_attributes[$k];
}else{
return null;
}
}
function __set($k, $v){
$this->_attributes[$k] = $v;
}
}
$a = new a();
$a->username = "sam";
var_dump($a->username);
$u = $a->username;
$u = $u.'dddd';
var_dump($a->username);
var_dump($u);
ここで __get から参照によって戻るという考えは、次のようなことができるようにするためです。
$this->user->ins[session_id()] = array(
"key"=>$_SESSION['server_key'],
"ip"=>$_SERVER['REMOTE_ADDR'],
"agent"=>$_SERVER['HTTP_USER_AGENT'],
"last_request"=>$_SERVER['REQUEST_URI'],
"last_active"=>new MongoDate(),
);
PHPが元の配列のコピーを使用しているため、通常はできないためです。ただし、「ユーザー名」を新しい変数 ($u) に入れるときに、元の親の参照を渡したくありません。
上記のスクリプトは以下を出力します。
string(3) "sam" string(3) "sam" string(7) "samdddd"
$username を参照として $u に戻していないので、これは素晴らしいことです。
質問の時間です。これは良いアプローチですか? これを行うためにPHPで期待される動作はありますか?
私は参照用にページを読んでいますが、少しパッチがありますが、PHP に $u が参照であることを伝えるには、変数を引き出すときに参照記号も使用する必要があると述べています (ここで見られるように: http: //php.net/manual/en/language.references.return.php )。
これは予想される動作で、PHP で信頼できますか?
ありがとう