Я создаю веб-сайт, который содержит пользователей с профилями пользователей. Многие поля в профиле являются необязательными.
Существует возможность для большого количества пользовательского контента, поэтому мне нужно отображать автора этого контента во многих разных местах сайта (комментариях, постах и т. д.). В профиле пользователя он может (необязательно) указать свое «имя», «фамилию» и «отображаемое имя».
Чтобы отобразить автора, я написал вспомогательный метод, который просматривает предоставленный массив этих полей и возвращает наиболее подходящее имя для пользователя в следующем порядке предпочтения:
- Если пользователь заполнил
display_name
, это будет отображаться. - Если пользователь заполнил
first_name
иlast_name
, но не заполнилdisplay_name
, он отобразит оба имени. - Если пользователь заполнил только
first_name
, он отобразитfirst_name
. - Если пользователь заполнил только
last_name
, он отобразитlast_name
. - Если ничего не помогает, будет отображаться идентификатор пользователя, например
user123
. - Если ни один из ключей массива не присутствует или параметр имеет значение NULL, имя будет отображаться как
NULL
Метод работает отлично, но некрасиво. Должен быть способ украсить это альтернативой вложенным операторам if/else.
public function nameify($names = NULL) {
$name = '';
if (!empty($names)) {
if (!empty($names['display_name'])) {
$name = $names['display_name'];
} elseif (!empty($names['first_name'])) {
$name = $names['first_name'];
if (!empty($names['last_name'])) {
$name .= ' ' . $names['last_name'];
}
} elseif (!empty($names['last_name'])) {
$name = $names['last_name'];
}
if (empty($name) && !empty($names['id'])) {
$name = 'user' . $names['id'];
} else {
$name = 'NULL';
}
} else {
$name = 'NULL';
}
return $name;
}
return
. Его можно вызывать не только в конце функции, но и где угодно. И это прекратит дальнейшее выполнение. Как иgoto
. См. ответ x3ro для примера - person Your Common Sense   schedule 28.09.2010