Производительность PHP: копия против ссылки

Привет. Сегодня я написал небольшой тестовый скрипт, чтобы сравнить производительность копирования переменных и создания ссылок на них. Я ожидал, что, например, создание ссылок на большие массивы будет значительно медленнее, чем копирование всего массива. Вот мой тестовый код:

<?php
    $array = array();

    for($i=0; $i<100000; $i++) {
        $array[] = mt_rand();
    }

    function recursiveCopy($array, $count) {
        if($count === 1000)
            return;

        $foo = $array;
        recursiveCopy($array, $count+1);
    }

    function recursiveReference($array, $count) {
        if($count === 1000)
            return;

        $foo = &$array;
        recursiveReference($array, $count+1);
    }

    $time = microtime(1);
    recursiveCopy($array, 0);
    $copyTime = (microtime(1) - $time);
    echo "Took " . $copyTime . "s \n";


    $time = microtime(1);
    recursiveReference($array, 0);
    $referenceTime = (microtime(1) - $time);
    echo "Took " . $referenceTime . "s \n";

    echo "Reference / Copy: " . ($referenceTime / $copyTime);

Фактический результат, который я получил, заключался в том, что recursiveReference занимал примерно в 20 раз (!) Больше времени, чем recursiveCopy.

Может кто-нибудь объяснить такое поведение PHP?

8
задан DaveRandom 18 March 2013 в 16:33
поделиться