Задача
Необходимо, чтобы параметр получил значение по умолчанию, если вызывающий функцию не передал для него никакого значения. Например, если в функцию вывода таблицы не передается значение ширины таблицы, то по умолчанию для этого параметра может быть установлено значение, равное 1.
Решение
Присвойте параметру значение по умолчанию в прототипе функции:
function wrap_html_tag($string, $tag = 'b') {
return "<$tag>$string</$tag>";
}
Обсуждение
Пример в разделе «Решение» устанавливает для полужирного текста значение по умолчанию, равное b. Например:
$string = 'I am some HTML';
wrap_html_tag($string);
возвращает:
I am some HTML
Следующий пример:
wrap_html_tag($string, 'i');
возвращает:
<i>I am some HTML</i>
Определяя значения по умолчанию, необходимо помнить две важные вещи. Во-первых, все параметры со значениями по умолчанию должны следовать за параметрами без значений по умолчанию. В противном случае PHP не сможет определить, какие параметры опущены и должны принять значения по умолчанию, а какие аргументы заменяют значение по умолчанию. Поэтому функция wrap_html_tag() не может быть определена следующим образом:
function wrap_html_tag($tag = 'i', $string)
Если так сделать и передать функции wrap_html_tag() только один аргумент, то PHP присвоит это значение переменной $tag и выдаст предупреждение, выражая недовольство пропуском второго аргумента.
Во-вторых, присвоенное значение должно быть константой: строкой или числом. Оно не может быть переменной. В качестве примера опять возьмем функцию wrap_html_tag(). Так делать нельзя:
$my_favorite_html_tag = 'i';
function wrap_html_tag($string, $tag = $my_favorite_html_tag) {
...
}
Если необходимо, чтобы по умолчанию не было присвоено ничего, то единственный способ это сделать состоит в том, чтобы присвоить параметру пустую строку:
function wrap_html_tag($string, $tag = '') {
if (empty($tag)) return $string;
return "<$tag>$string</$tag>";
}
Эта функция возвращает оригинальную строку, если для переменной $tag не было передано никакого значения. А если был передан тег (не пустой), то она возвратит строку, находящуюся внутри тегов.В зависимости от обстоятельств другой альтернативой значения по умолчанию для переменной $tag являются значения 0 или NULL. В функции wrap_html_tag() пустое значение тега нам ни к чему. Однако в некоторых случаях пустая строка может быть вполне допустима.
Например, функция join() часто вызывается с пустой строкой после вызова функции file(), чтобы поместить файл в строку. Кроме того, как пока-
зывает следующий код, можно использовать сообщение по умолчанию, если не передано никаких аргументов, и пустое сообщение, если передана пустая строка:
function pc_log_db_error($message = NULL) {
if (is_null($message)) {
$message = 'Couldn't connect to DB';
}
error_log("[DB] [$message]");
}