Я установил действие по умолчанию в окнах для "Открытия WinZip". Это облегчает управлять БАНКАМИ как архивами. Можно даже добавить/удалить файлы вручную.
sprintf
имеет все возможности форматирования исходного printf, что означает, что вы можете делать гораздо больше, чем просто вставлять значения переменных в строки.
Например, укажите формат числа (шестнадцатеричный, десятичный, восьмеричный), количество десятичные дроби, отступы и многое другое. Google для printf, и вы найдете множество примеров. Статья в википедии о printf должна помочь вам начать работу.
Обычно я использую sprintf, чтобы убедиться, что идентификатор, поступающий из пользовательский ввод представляет собой целое число, например:
// is better use prepared statements, but this is practical sometimes
$query = sprintf("SELECT * from articles where id = %d;",$_GET['article_id']);
Также используется для создания элементарных шаблонов (для HTML-писем или других вещей), поэтому вы можете повторно использовать шаблон во многих местах:
$mail_body = "Hello %s, ...";
$oneMail = sprintf($mail_body, "Victor");
$anotherMail = sprintf($mail_body, "Juan");
Также очень полезно форматировать числа в различные представления (восьмеричное, управление десятичным разрядом и т. д.).
Иногда я получал что-то вроде этого, что я считаю немного более легким для чтения:
$fileName = sprintf('thumb_%s.%s',
$fileId,
$fileInfo['extension']);
В некоторых типичных случаях требуется более точный контроль над форматом вывода. Может быть сложно, например, убедиться, что определенное значение имеет определенное количество пробелов, добавленных впереди, в зависимости от его длины, или что число выводится в определенном точном формате.
Есть много примеров в руководство по PHP
Также, что касается вашего примера «проще писать» .. Хотя эхо может быть проще написать, sprintf легче читать, особенно если у вас много переменных.
Другая причина использование sprintf или printf может означать, что вы хотите позволить пользователю определять выходной формат некоторого значения - вы можете спокойно разрешить им определять выходной формат, совместимый со sprintf.
О, и ваш пример на самом деле неверен для одной части. sprintf
возвращает строку,
Лучшая причина, которую я обнаружил, заключается в том, что она позволяет вам размещать все языковые строки в вашем языковом файле, где люди могут переводить и упорядочивать их по мере необходимости, - но вы все равно знаете, формат, в котором находится строка - вы хотите показать имя пользователя.
Например, ваш сайт скажет «С возвращением [[Пользователь]]» вверху страницы. Как программист, вы не знаете или не заботитесь , как разработчики пользовательского интерфейса собираются это написать - вы просто знаете, что имя пользователя будет отображаться где-то в сообщении.
Таким образом, вы можете встроить сообщение в свой код, не беспокоясь о том, что это за сообщение на самом деле.
Lang file (EN_US):
...
$lang['welcome_message'] = 'Welcome back %s';
...
Затем вы можете поддерживать любой тип сообщения на любом языке, используя это в своем фактический PHP-код.
sprintf($lang['welcome_message'], $user->name())
Как уже упоминалось, он позволяет форматировать входные данные. Например, принудительное использование 2dp, 4-значных чисел и т. Д. Это весьма полезно для построения строк запроса MySQL.
Еще одно преимущество состоит в том, что он позволяет отделить макет строки от вводимых в нее данных, почти как подача в параметрах. Например, в случае запроса MySQL:
// For security, you MUST sanitise ALL user input first, eg:
$username = mysql_real_escape_string($_POST['username']); // etc.
// Now creating the query:
$query = sprintf("INSERT INTO `Users` SET `user`='%s',`password`='%s',`realname`='%s';", $username, $passwd_hash, $realname);
Этот метод, конечно, может использоваться и в других целях, например, при печати вывода в формате HTML и т. Д.
Изменить: По соображениям безопасности при использовании Как описано выше , вы должны дезинфицировать все входные переменные с помощью mysql_real_escape_string ()
перед использованием этого метода , чтобы предотвратить атаки вставки MySQL. Если вы проанализируете необработанный ввод, ваш сайт и сервер будут взломаны . (За исключением, конечно,
Это проще перевести.
echo _('Here is the result: ') . $result . _(' for this date ') . $date;
Строки перевода (gettext) теперь имеют вид:
При переводе на другой язык это может оказаться невозможным или привести к очень странным предложениям.
Теперь, если у вас есть
echo sprintf(_("Here is the result: %s for this date %s"), $result, $date);
Строки перевода (gettext), это:
Что дает много больше смысла и гораздо удобнее переводить на другие языки
Есть много вариантов использования sprintf, но я использую их в качестве одной из следующих строк: «Здравствуйте, меня зовут% s» в базе данных или как константу в Класс PHP. Таким образом, когда я хочу использовать эту строку, я могу просто сделать это:
$name = 'Josh';
// $stringFromDB = 'Hello, My Name is %s';
$greeting = sprintf($stringFromDB, $name);
// $greetting = 'Hello, My Name is Josh'
По сути, это позволяет некоторое разделение в коде. Если я использую 'Hello, My Name is% s' во многих местах моего кода, я могу изменить его на '% s is my name' в одном месте, и он обновляется везде автоматически, без необходимости переходить к каждому экземпляру и перемещаться. конкатенации.
Другое использование sprintf
- в локализованных приложениях, поскольку аргументы для sprintf
не обязательно должны быть в том порядке, в котором они появляются в строке формата. .
Пример:
$color = 'blue';
$item = 'pen';
sprintf('I have a %s %s', $color, $item);
Но такой язык, как французский, упорядочивает слова по-другому:
$color = 'bleu';
$item = 'stylo';
sprintf('J\'ai un %2$s %1$s', $color, $item);
(Да, мой французский отстой: я учил немецкий в школе!)
На самом деле вы бы использовали gettext для хранения локализованных строк, но вы поняли идею.
Если вы использовали C / C ++, то вы привыкли к функции sprintf .
Есть большая вероятность, что вторая линия менее эффективна. Echo разработан как команда вывода, тогда как sprintf предназначен для подстановки строковых токенов. Я не специалист по PHP, но подозреваю, что с эхом связано больше объектов. Если он действует как Java, он создает новую строку каждый раз, когда что-то добавляется в список, так что в итоге вы получите 4 строки.
define('TEXT_MESSAGE', 'The variable "%s" is in the middle!');
sprintf(TEXT_MESSAGE, "Var1");
sprintf(TEXT_MESSAGE, "Var2");
sprintf(TEXT_MESSAGE, "Var3");