За последние 24 часа нас посетили 51182 программиста и 1808 роботов. Сейчас ищут 1707 программистов ...

не работает присвоение по ссылке (как часть сроки)

Тема в разделе "PHP для новичков", создана пользователем php_user, 8 дек 2014.

  1. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    Почему не работает присвоение по ссылке как часть сроки (где конкретно почитать про данный случай)?
    Код (PHP):
    1. $rrr = 777;
    2. $yyy=&$rrr;
    3. echo $yyy; ///777
    4. $www = 'Проверка '.&$rrr; //ССЫЛКА
    5. echo $www; //Parse error: syntax error, unexpected '&' in ...
    6.  
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    почитать в мануале по ссылкам. но там на самом деле нужно понимать как данные хранятся в пхп-машине (да и много где).
    утрированно. строка1 - присвоили ррр значение 777. машина создает ячейку А в памяти, пишет в нее 777, ставит указатель ррр на ячейку А, ставит счетчик ссылок в 1.
    строка 2. передача по ссылке. машина ставит указатель ууу на ячейку А, прибавляет счетчик ссылок ячейки А - он становится равен двум.
    строка 3. вывод значения переменной ууу. обращается по указателю к ячейке А и получает оттуда ожидаемое 777.
    строка 4. попытка присвоить переменной ввв значение являющееся (внимание) конкатенацией строки "проверка" с указателем на ячеку А (хранящуюся в переменной ррр). естественно это выдает ошибку синтаксиса.
    уберите амперсанд и тогда логика будет другая: присвоение переменной ввв результата конкатенации строки "проверка" со значением переменной ррр. по указателю (на ячейку А) получаем значение (ячейки А) - 777, собираем вместе, получаем строку "проверка 777", записываем в ячеку Б, ставим указатель ввв на ячеку Б, ставим счетчик ссылок ячейки Б в единицу.

    вот как-то так. счетчик ссылок - для уборки мусора. то есть пока есть ссылки - ячейка живет. когда ссылок ноль - её можно переписать или полностью удалить.