…
— Вы знаете, нам нужны кирпичи!.. — начала разговор Галя.
— Сколько? — поинтересовался Иван Иванович, продолжая писать.
— Много, — торопливо вставил Чебурашка. — Очень много.
— Нет, — ответил Иван Иванович, — много я дать не могу. Могу дать только половину.
— А почему?
— У меня такое правило, — объяснил начальник, — всё делать наполовину.
— А почему у вас такое правило, — спросил Чебурашка.
— Очень просто, — сказал Иван Иванович. — Если я всё буду делать до конца и всем всё разрешать, то про меня скажут, что я слишком добрый и каждый у меня делает, что хочет. А если я ничего не буду делать и никому ничего не разрешать, то про меня скажут, что бездельник и всем только мешаю. А так про меня никто ничего плохого не скажет. Понятно?
— Понятно, — согласились посетители.
— Так сколько кирпичей вам нужно?
— Мы хотели построить два маленьких домика, — схитрил крокодил.
— Ну что ж, — сказал Иван Иванович, — я вам дам кирпичи на один маленький домик. Это будет как раз тысяча штук. Идёт?
…
Блин. Сложно опровергнуть опровержение, но попробую погнуть свою линию.
Я пытаюсь опровергнуть вот это:
««… объекты по-прежнему являются значениями, но это значение представляет из себя ссылку на инстанс класса.» — ложь, в PHP объекты передаются только по ссылке.»
И тем не менее это правда. Переменные не содержат объектов, они содержат указатели на объекты. Когда мы производим присваивание, то происходит копирование указателя на объект. Когда передаём по ссылке (используя &), то получаем ссылку на указатель на объект.
Ну и, конечно, код, который это подтверждает (xdebug надо только поставить):
$a = new stdClass();
xdebug_debug_zval('a'); //(refcount=1, is_ref=0), object(stdClass)[1]
//refcount - количество ссылок на контейнер со значением
//is_ref - является ли данная переменная частью набора ссылок на контейнер со значением
$b = &$a;
$с = &$b;
xdebug_debug_zval('a'); //(refcount=3, is_ref=1), object(stdClass)[1]
xdebug_debug_zval('b'); //(refcount=3, is_ref=1), object(stdClass)[1]
xdebug_debug_zval('с'); //(refcount=3, is_ref=1), object(stdClass)[1]
// тут всё понятно, набор состоит из 3 ссылок. a, b, c - как раз и составляет набор этих ссылок
$d = $a;
xdebug_debug_zval('d'); //(refcount=1, is_ref=0), object(stdClass)[1]
// всего одна ссылка на контейнер (хотя объект скопирован не был). d - не принадлежит набору ссылок. Т.е. d - не ссылка и в $d = $a происходит именно копирование. Но копируется указатель на объект, а не сам объект.
Боюсь, что автор обрёк себя на эпичный провал с этой статьёй. И, видимо, с той, которую он планирует написать.
Вот небольшой код, который показывает особенность указателей и ссылок:
<?php
function tonull1($variable)
{
$variable = null;
}
function tonull2(&$variable)
{
$variable = null;
}
$a = new stdClass(); //$a - содержит указатель на объект
var_dump($a); //object(stdClass)[1]
tonull1($a); //передали копию на указатель на объект, с указателем ничего не случилось
var_dump($a); //object(stdClass)[1]
tonull1(&$a); //передали ссылку на указатель на объект, указатель обнулился.
var_dump($a); //null
$a = new stdClass(); //$a - содержит указатель на объект
var_dump($a); //object(stdClass)[1]
tonull2($a); //функция примет ссылку на указатель на объект, указатель обнулился.
var_dump($a); //null
P.S. "… Я не очень понял о чем это. ..." — так настоящий оппонент не будет говорить.
Не путайте людей. На 0 делить нельзя. 0 — это конкретное число, которое не имеет знака. Когда же в пределе вы приближаетесь к 0, то получаете бесконечно малую величину отличную от 0. Так как она отлична от 0, то можно говорить о знаке этой величины.
Можете смело делать пост с темой:
> Поговаривают, что блог Лебедева блокирован фальшивыми записями DNS
А, если пройдётесь по френдам и уведите там тоже самое, то на каждого такого френда можно сделать по такой статье.
Ну… я смотрю их ещё «в комментариях» нет. Когда будут — зовите.
Хотя, если быть формально точным… доказывать то тут и нечего. Ведь заголовок «Поговаривают,...» и переведены ссылки, где действительно поговаривают. Всё точно. При этом не следует заострять внимание на том, что там где «поговаривают» ссылаются на один источник. Теперь тот человек, который захочет осветить это проблему в своём ЖЖ может дать на одну ссылку больше, чем Вы. Т.е. ещё на этот пост и начать тему с таких слов «Всё больше человек поговаривают, ...». И тот человек будет тоже абсолютно прав.
Лучше не использовать магический метод прямо. Назовите его по-другому. Хотя бы потому, что этот метод вызовется ещё раз. В Вашем выводе это как раз видно.
При этом объект, который не имеет ссылок на себя в объектах-свойствах, после вызова этого метода не удалится. Будет пустым, но не удалится.
И ещё расшифровку… что значит тот или иной «процент»?
И чего это вдруг Китайский стал доминирующим, если он только на втором месте?
Простите меня, я так больше не буду…
http://www.php.net/manual/ru/features.gc.refcounting-basics.php
Я пытаюсь опровергнуть вот это:
««… объекты по-прежнему являются значениями, но это значение представляет из себя ссылку на инстанс класса.» — ложь, в PHP объекты передаются только по ссылке.»
И тем не менее это правда. Переменные не содержат объектов, они содержат указатели на объекты. Когда мы производим присваивание, то происходит копирование указателя на объект. Когда передаём по ссылке (используя &), то получаем ссылку на указатель на объект.
Ну и, конечно, код, который это подтверждает (xdebug надо только поставить):
Вот небольшой код, который показывает особенность указателей и ссылок:
P.S. "… Я не очень понял о чем это. ..." — так настоящий оппонент не будет говорить.
> Поговаривают, что блог Лебедева блокирован фальшивыми записями DNS
А, если пройдётесь по френдам и уведите там тоже самое, то на каждого такого френда можно сделать по такой статье.
Хотя, если быть формально точным… доказывать то тут и нечего. Ведь заголовок «Поговаривают,...» и переведены ссылки, где действительно поговаривают. Всё точно. При этом не следует заострять внимание на том, что там где «поговаривают» ссылаются на один источник. Теперь тот человек, который захочет осветить это проблему в своём ЖЖ может дать на одну ссылку больше, чем Вы. Т.е. ещё на этот пост и начать тему с таких слов «Всё больше человек поговаривают, ...». И тот человек будет тоже абсолютно прав.
У меня Веб-стрим было одно время. Так DNS сервера безбожно глючили — часть сайтов открывалась, часть нет.
Я негодую… Тут можно как-то «утопить» пост?
При этом объект, который не имеет ссылок на себя в объектах-свойствах, после вызова этого метода не удалится. Будет пустым, но не удалится.