21 ошибка программиста PHP. Часть 1

ОГЛАВЛЕНИЕ


18. Слишком много переменных - слишком большое время выполнения

Некоторые прямо-таки страдают навязчивой идеей вводить временные переменные где надо и где не надо. Совершенно невозможно понять, чем руководствовался человек, написавший такой код:

<?php
$tmp = date ("F d, h:i a"); // т.е. формат даты February 23, 2:30 pm
print $tmp;
?>

Для чего здесь использована временная переменная?! Она просто не нужна:

<?php
print date ("F d, h:i a");
?>

К сожалению, многие программисты никак не могут избавиться от этой дурной привычки. Использование временных переменных замедляет выполнение программы. Для увеличения скорости кода, где это возможно, лучше воспользоваться вложением функций. Использование временных переменных зачастую увеличивают время выполнения скриптов почти на четверть.

Еще одна причина, по которой следует избегать использования излишнего количества временных переменных, это ухудшение читаемости кода. Сравните два приведенных примера. Какой из них выглядит более элегантно - с использованием временной переменной или без? Какой код проще прочесть? Использование лишних временных переменных ведет к написанию менее читаемого и ясного кода.

Плюсы использования временных переменных

Введение временных переменных позволяет упростить некоторые сложные выражения или вызовы функций. Еще они приносят пользу, когда позволяют избежать многократного вызова функции с одними и теми же аргументами.

Вот пример, в котором не используется лишних переменных:

<?php

// string reverse_characters (string str)
// Переворачивает строку символов


function  reverse_characters ($str)
{
return implode ("", array_reverse (preg_split ("//", $str)));
}

?>

Вызову функции implode() в качестве одного из параметров передается результат выполнения вложенных функций, поэтому такой код трудно прочесть. В данном случае нам может здорово помочь использование временной переменной:

<?php

// string reverse_characters (string str)
// Переворачивает строку символов


function reverse_characters ($str)
{
$characters = preg_split ("//", $str);
    $characters = array_reverse ($characters);
    return implode (""$characters);
}

?>

Золотое правило

Если вы думаете, ввести или нет еще одну временную переменную, задайте себе два вопроса:

  • Будет ли эта переменная использована хотя бы дважды?
  • Значительно ли улучшится с ее введением читаемость кода?

Если на любой из этих вопросов вы ответили "да", тогда введите временную переменную. Иначе комбинируйте вызовы функций (если это необходимо) и обойдитесь без ее использования.