&$ - только ли для одной цели?

  • Автор темы sergo_stavropol
  • Дата начала

sergo_stavropol

Guest
&$ - только ли для одной цели?

То что амперсанд перед именем переменной нужен для того, чтобы переменную , переданную в качестве аргумента можно было модифицировать не только внутри пользовательской ф-ии, но и вынести новое значение за ее пределы, это понятно

но что, к примеру, в этом случае он делает? для чего нужен? (разбираюсь в чужом скрипте)

PHP:
$this->$data = $query->mysql_query("my_query");
$data = &$this->data;
 

Said

Guest
Re: &$ - только ли для одной цели?

Автор оригинала: sergo_stavropol

но что, к примеру, в этом случае он делает? для чего нужен? (разбираюсь в чужом скрипте)

PHP:
$this->$data = $query->mysql_query("my_query");
$data = &$this->data;
здесь 'он' делает имена $data и $this->data синонимами т.е. по ним будет происходить обращение к одним и тем же данным. скорее всего для удобства и лучшей читабельности
 

sergo_stavropol

Guest
Короче если для переменной-члена текущего экземпляра класса хочешь сделать что-то типа алиаса, без '$this->' (для упрощения читаемости наверное?), то нужно использовать амперсанд, чтобы не создался еще один экземпляр класса?

вообще темный лес конечно для меня ... с чего бы ему создаться без вызова new ?
..... ладно, ушел учить матчасть
 

Quidle

Полноценный новичок
Знак & - обращение к адресу переменной, а не к самой переменной.
Книжки читать надо :)
 

sergo_stavropol

Guest
веришь, читаю :) но не все еще прочитал :)

адресу переменной в текущей таблице символов? :)
 

Сергей123

Новичок
Verk, это не называется указателями.
sergo_stavropol, прямо на странице по ссылке от Verk перечислены допустимые термины и ассоциации. Всё. Больше никаких терминов.
 

Said

Guest
в таблице символов хранятся символьные имена переменных.. одна переменная может иметь несколько символьных имен...

$a = 1000;
- переменная с именем 'a'
$b = &$a
- в табл символов пишется имя 'b' которое ссылается на те же данные что и 'a'
$c = $a
- делается копия данных из переменной $a и в табл символов пишется имя 'c' которое ссылается уже на эту копию
 

Quidle

Полноценный новичок
2 Серго: переменные, как известно, хранятся в памяти.
Что делает ПХП внутри функции - создаёт копию переменной, с ней работает, а при выходе из функции возвращается к старому, неизменённому значению.
А если ему указать &, то работа будет происходить с данными лежащими по ентому адресу, то есть по адресу нашей переменной. И все изменения будут вноситься не в копию переменной, а в неё саму.

З.Ы. Надеюсь, я понятно объяснил :)
 

Crazy

Developer
Автор оригинала: Quidle
А если ему указать &, то работа будет происходить с данными лежащими по ентому адресу, то есть по адресу нашей переменной. И все изменения будут вноситься не в копию переменной, а в неё саму.
А теперь проведем эксперимент:

PHP:
<?php

$foo = 'aaa';
$bar =& $foo;
$bar = 'bbb';
echo "<br>bar=$bar\n";
echo "<br>foo=$foo\n";
unset($foo);
$foo = "ccc";
echo "<br>bar=$bar\n";
echo "<br>foo=$foo\n";

?>
:)
 

Quidle

Полноценный новичок
Это будет ссылка на переменную, не суть важно.
Главное, чтобы человек понял :)
 

tony2001

TeaM PHPClub
Quidle:
в первом же ответе была ссылка на мануал.
почитай, это интересно.

суть важно то, что ты говоришь бред.
 

Quidle

Полноценный новичок
А своим unset и заданием нового значения ты не задаёшь ли переменной новую область памяти ?
 

Crazy

Developer
Автор оригинала: Quidle
А своим unset и заданием нового значения ты не задаёшь ли переменной новую область памяти ?
А куда делась старая? :) Почему она не удалилась, в продолжила свою жизнь?

Ответ этот вопрос поможет тебе не путать адреса и ссылки. :)
 
Сверху