Я создаю веб-сайт, который содержит пользователей с профилями пользователей. Многие поля в профиле являются необязательными.
Существует возможность для большого количества пользовательского контента, и поэтому мне нужно отображать автора этого контента в разных местах сайта (комментарии, посты и т. Д.). В профиле пользователя он может (при желании) указать свое «имя», «фамилию» и «отображаемое имя».
Чтобы отобразить автора, я написал вспомогательный метод, который просматривает предоставленный массив этих полей и возвращает наиболее подходящее имя для пользователя в следующем порядке:
- Если пользователь заполнил
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;
}