У меня есть пример сценария здесь с возвращением по эталонным волшебной __get:PHP Возврат по ссылке Разъяснение
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"
который является удивительным это еще потому не проходит $ имя пользователя в качестве ссылки обратно $ и и она работает, как я хочу его.
Сейчас на этот вопрос: Это хороший подход? Ожидается ли поведение PHP в этом?
Я читал страницу для ссылок, но это немного неоднородно, однако упоминает, что для того, чтобы сказать PHP, что $ u должно быть ссылкой, я также должен использовать ссылочный символ при вытаскивании переменной (как можно видеть здесь: http://php.net/manual/en/language.references.return.php).
Итак, это ожидаемое поведение, и я могу полагаться на него на PHP или есть что-то ужасное, чего я не вижу?
Благодаря
regr спасибо за информацию :) – Sammaye