На работе у меня есть экземпляр виртуальной машины PHP, который включает расширение PECL под названием VLD. Это позволяет выполнять код PHP из командной строки и вместо того, чтобы выполнять его, вместо этого возвращает сгенерированный код операции.
Замечательно отвечать на такие вопросы.
http://pecl.php.net/package/vld
На всякий случай, если вы пойдете по этому пути (и если вам, как правило, любопытно, как PHP работает внутри, я думаю, вам следует), вам определенно следует установить его на виртуальной машине (то есть я бы не стал устанавливать его на машина, которую я пытаюсь развить или развернуть). И эту команду вы будете использовать, чтобы заставить ее петь:
php -d vld.execute=0 -d vld.active=1 -f foo.php
Просмотр кодов операций расскажет вам более полную историю, однако у меня есть предположение ... Большинство встроенных функций PHP делают копию массива / объекта и действуют на эту копию (а не на копию). при записи либо немедленная копия). Наиболее широко известным примером этого является foreach (). Когда вы передаете массив в foreach (), PHP фактически делает копию этого массива и выполняет итерацию для этой копии. Вот почему вы увидите значительное преимущество в производительности, передав массив в качестве ссылки в foreach, например:
foreach ($ someReallyBigArray as $ k => & $ v)
Но это поведение - передача такой явной ссылки, как эта, - уникально для foreach (). Поэтому я был бы очень удивлен, если бы он сделал проверку array_key_exists () быстрее.
Хорошо, вернемся к тому, к чему я шел ..
Большинство встроенных модулей берут копию массива и действуют на эту копию. Я собираюсь рискнуть совершенно безоговорочным предположением, что isset () высоко оптимизирован и что одна из этих оптимизаций, возможно, состоит в том, чтобы не делать немедленной копии массива при его передаче.
Я постараюсь ответить на любые другие вопросы, которые у вас могут возникнуть, но вы, вероятно, могли бы прочитать многие из вас в Google, чтобы найти "zval_struct" (которая представляет собой структуру данных во внутреннем устройстве PHP, которая хранит каждую переменную. Это структура C (подумайте .. ассоциативный массив), который имеет ключи типа "value", "type", "refcount".