Зачем простому PHP разработчику может понадобится дебаг исходников? Ну например если он заметил какое то не очевидное поведение и хочет разобраться в нем на максимально “низком” уровне. О таком интересном для меня поведение, а так же процессе “дебага сурсов” я и хотел бы поговорить.
Мотивация
Начнем с места в карьер, вот два похожих куска кода:
$arr = [];
for ($i =0; $i < 300; $i++)
{
$arr[rand(1,1000)] = 1;
}
$sum = 0;
for ($i = 1001; $i < 200000000; $i++){
if (array_key_exists($i, $arr)){
$sum++;
}
}
$arr = [];
for ($i =0; $i < 300; $i++)
{
$arr[rand(1,1000)] = 1;
}
sort($arr);
$sum = 0;
for ($i = 1001; $i < 200000000; $i++){
if (array_key_exists($i, $arr)){
$sum++;
}
}
Разница между ними в том, что во втором случае мы отсортировали массив $arr, тем самым обновили ключи 0..count($arr)-1. А заинтересовал меня тот момент, что первый скрипт выполняется 6.0 секунд, тогда как второй 4.7 секунды. Получается около 20 процентов разницы.
Если Вы знакомы с внутренним устройством хэш-таблицы php а так же с хэш функцией то Вы или уже знаете ответ или можете без особого труда догадаться. Ну а для остальных я расскажу как настроить среду для дебага и выяснить в чем же дело.
Читать полностью »