21 ошибка программиста PHP. Часть 1 - Неоправданное использование функции printf()

ОГЛАВЛЕНИЕ

21. Неоправданное использование функции printf()

Функция printf() предназначена для вывода форматированных данных.

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

Ниже приведен пример обоснованного применения функции printf(). В данном случае она используется для форматированного вывода числа "пи":

<?php

printf ("Число Пи: %2f\n<br>\n", M_PI);
printf ("Это тоже число Пи: %3f\n<br>\n", M_PI);
printf ("И это Пи: %4f\n<br>\n", M_PI);

?>

Примечание: Наблюдаются случаи патологической боязни функции printf(), когда люди пишут свои функции форматированного вывода, порой по 30-40 строк, хотя все проблемы мог бы решить один-единственный вызов функции printf().

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

  • когда следовало бы использовать функцию print();
  • при выводе результатов, возвращаемых функциями.

Когда следует использовать print()

Вызов функции printf() зачастую используется там, где следовало бы использовать print(). В следующем примере функция printf() используется для вывода четырех переменных:

<?php

$name = 'Sterling Hughes';
$job = 'Senior Engineer';
$company = 'DesignMultimedia';
$email = 'Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.';

printf ( "Меня зовут %s\n<br>\n
Я работаю %s, %s\n<br>\n
Мой адрес E-mail:%s\n<br>\n",
$name, $job, $company, $email );
?>

В данном случае возможно (и желательно!) применение print():

  print "Меня зовут $name\n<br>\n
Я работаю в $company, $job\n<br>\n
Мой адрес E-mail: $email\n<br>\n";

Использование print() вместо printf() в случаях, когда выводятся неформатированные данные, как в данном примере, дает следующие выгоды:

  • Увеличение производительности: Функция printf() форматирует свои аргументы перед выводом. Таким образом, время ее выполнения больше, чем для функций print() или echo().
  • Более ясный код: Все-таки надо признать, что использование функции printf() затрудняет чтение кода (имеющих достаточный опыт программирования на C это, конечно, касается в меньшей степени). Чтобы функция printf() не повела себя самым неожиданным для вас образом, требуется как знание синтаксиса данной функции, (т.е. %s определяет строковый формат вывода, тогда как %d - десятичный), так и знание типов переменных.

Использование функции printf() для вывода значения, возвращаемого функцией

Еще одна характерная ошибка использования функции printf() - вывод значения, возвращаемого функцией, как в следующем примере:

<?php

printf ("Найдено %d вхождений строки %s", count ($result), $search_term);

?>

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

<?php

print "Найдено " .
count ($result) .
" вхождений строки $search_term";

?>

Использование оператора . в паре с функцией print() позволяет избежать использования более медленной функции printf().