За последние 24 часа нас посетили 66615 программистов и 1617 роботов. Сейчас ищут 1048 программистов ...

Ссылки в php ссылки ли?

Тема в разделе "Прочие вопросы по PHP", создана пользователем [vs], 29 июн 2009.

  1. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. class link
    3. {
    4.         public $link;
    5. }
    6. $var = 1024;
    7. $obj = new link();
    8. $obj -> link = &$var;
    9. print_r($obj);
    10. file_put_contents('link.obj', serialize($obj));
    11. ?>
    Код (Text):
    1. link Object
    2. (
    3.     [link] => 1024
    4. )
    PHP:
    1. <?php
    2. class link
    3. {
    4.         public $link;
    5. }
    6. $obj = unserialize(file_get_contents('link.obj'));
    7. print_r($obj);
    8. ?>
    Код (Text):
    1. link Object
    2. (
    3.     [link] => 1024
    4. )
    (это разные скрипты)
    Всвязи с этим вопрос - копируется ли на самом деле по ссылке значение переменной, или есть ли смысл использовать ссылки для экономии памяти? Или значение копируется только при сериализации?
     
  2. При сериализации ) сериализуется то тупо в текстовую строку, конечно все ссылки разрушаются )
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А я ожидал, что после десереализации там будет Undefined variable )
     
  4. Сериализуются не переменные, а их значения )
     
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    А вопрос то катит на форум для блондинок, ага :D
     
  6. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    "&$var" для экономии памяти совершенно не стоит использовать. Оно не является источником экономии памяти.
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А если $var - целый файл?
     
  8. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    [vs], в любом случае. Если ты сделаешь $a = $b;, то $b будет использовать тот же слот памяти, что и $a, пока ты не решишь его поменять. При использовании ж ссылки может быть с точностью до наоборот при определенных условиях.

    Я по поводу этого, вроде, на хабре статью читал. Поищи, может найдешь.
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    А чего там читать, в офф. документации уже давно написано, это является фишкой PHP5.

    При присвоении переменной другой переменной, или при передаче данных в функцию, данные не копируются, а создаются ссылки на эти данные. Если мы не пытаемся модифицировать данные, то они так и остаются ссылками. Как только вы пытаетесь что-то обновить в переменной (скажем в массиве какой-то ключ), то она копируется и производится обновление данных уже в нынешнем экземпляре.
    Ну а объекты всегда идут ссылкой и если вам нужно копию уже созданного объекта - нужно явно использовать clone.

    Народ, пора бы перечитать начальную часть мануала всем кто этого не делал за последние пол года, т.е. справочник по языку, там очень много что поменялось и добавилось.