За последние 24 часа нас посетили 15547 программистов и 1613 роботов. Сейчас ищут 796 программистов ...

$a = $b, cow

Тема в разделе "PHP для новичков", создана пользователем VLK, 11 май 2015.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    В PHP при передачи переменной функции, мы работаем с этой переменной, но если мы решим ее исправить то она будет откопирована, т.е. Copy-On-Write, COW, собственно вопрос, а вот в таком случае, тоже будет COW:

    Код (PHP):
    1. $a = 'hello';
    2. $b = $a; // тут произойдет копирование? или когда мы попытаемся изменить $b? 
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    длинный ответ:
    строка 1: инициализация переменной
    записать в ячейку1 памяти строку хэллоу
    присвоить указатель1 на эту ячейку1 переменной с именем а

    строка 2: копирование переменной (присвоить переменной б значение переменной а)
    читаем указатель1 переменной а
    создаем ячейку2 памяти
    записываем в ячейку2 памяти значение ячейки1 [на которую ссылается указатель1 переменной а]
    присваиваем указатель2 переменной с именем б

    короткий ответ: тут
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    спасибо!
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ты неправ.
    CoW как раз в том и заключается, что новая память под строку ,в данный момент, выделена не будет.
    php только инкрементирует счетчик ссылок refcount в zval контейнере. $b будет ссылаться на те же данные.

    Добавлено спустя 1 минуту 17 секунд:
    даже в мануале есть об этом
     
  5. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну прям век живи век учись. всю жизнь рассказываю про передачу по ссылке и передачу значения а тут оказывается нихера не так. уйду я от вас...