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

dimitrius

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

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

Да и в случае с обычными типами, если переданная переменная используется только для чтения, разницы тоже не будет из-за внутреннего «ленивого» механизма копирования переменных (реальная копия создастся только при изменении данных, до этого вторая переменная по факту практически работает как ссылка)
 
Внимание, загадка! Что выведет код, и почему?
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);
?>
 
P.S. В контексте PHP4 — parse error ;)
а в контексте 5-го? Особенно — почему?
флоппик, речь шла о new.
В php4 ты после new получал объект, а не ссылку. Соответственно, если ты передавал его как аргумент дальше — ты благополучно получал его копию внутри метода, а не ссылку на него.
 
флоппик, я тебе ещё раз повторю: речь шла о &new, в котором я не увидел смысл. Рассказывать мне про то, что было в PHP4 и PHP5 — спасибо, не надо.
 
На первый взгляд я бы сказал, что выведет три ссылки на объект с буквой 'c'.
Массив заполняется тремя ссылками на $obj, а внутри $obj в момент вызова var_dump лежит объект 'c'.

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

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