我在这里有一个示例脚本,通过引用魔术 __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 中依赖它还是有什么可怕的东西我没有看到?
谢谢