Насколько быстрее работать с ссылками?

dimitrius

Новичок
Насколько быстрее работать с ссылками чем с копированием нового объекта в переменную?
$x = new X;
function x1($x );
function x2(& $x);
обьект $x небольшой
какая функция будет работать быстрее? если код внутри одинаковый.
насколько это экономит время?

p.s. зачем пишут $x = & new X; что такая форма записи дает?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
p.s. зачем пишут $x = & new X; что такая форма записи дает?
Это старая форма записи, использовалась пять-шесть лет назад в PHP4.
Сейчас все объекты передаются по ссылке всегда, кроме случая когда ты напрямую указываешь, что это клонирование, а не передача объекта.
Поэтому скорость работы кода в обоих случаях будет одинакова — если это объект, конечно.

Да и в случае с обычными типами, если переданная переменная используется только для чтения, разницы тоже не будет из-за внутреннего «ленивого» механизма копирования переменных (реальная копия создастся только при изменении данных, до этого вторая переменная по факту практически работает как ссылка)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Внимание, загадка! Что выведет код, и почему?
PHP:
<?php
class Trick {
        protected $i;
        public function __construct($i)
        {
                $this->i = $i;
        }
}
$a = array();
foreach (array('a', 'b', 'c') as $letter)
{
        $obj = new Trick($letter);
        $a[] = &$obj;
}

var_dump($a);
?>
 

флоппик

promotor fidei
Команда форума
Партнер клуба
P.S. В контексте PHP4 — parse error ;)
а в контексте 5-го? Особенно — почему?
флоппик, речь шла о new.
В php4 ты после new получал объект, а не ссылку. Соответственно, если ты передавал его как аргумент дальше — ты благополучно получал его копию внутри метода, а не ссылку на него.
 

Вурдалак

Продвинутый новичок
флоппик, я тебе ещё раз повторю: речь шла о &new, в котором я не увидел смысл. Рассказывать мне про то, что было в PHP4 и PHP5 — спасибо, не надо.
 

~WR~

Новичок
На первый взгляд я бы сказал, что выведет три ссылки на объект с буквой 'c'.
Массив заполняется тремя ссылками на $obj, а внутри $obj в момент вызова var_dump лежит объект 'c'.

Если не так, то больно не бейте. Ночь все же. :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
На первый взгляд я бы сказал, что выведет три ссылки на объект с буквой 'c'.
Массив заполняется тремя ссылками на $obj, а внутри $obj в момент вызова var_dump лежит объект 'c'.

Если не так, то больно не бейте. Ночь все же. :)
Ты прав :)
А вот если сделать &new — получишь a,b,c
 
Сверху