Что является более элегантным решением для этих вложенных операторов if / elseif?

Я создаю веб-сайт, содержащий пользователей с профилями пользователей. Многие поля в профиле необязательны.

Существует возможность для большого количества пользовательского контента, поэтому мне нужно отображать автора этого контента во многих различных местах сайта (комментарии, сообщения и т. Д.). В профиле пользователя он может (при желании) указать свое «имя», «фамилию» и «отображаемое имя».

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

  1. Если пользователь заполнил display_name , это будет отображаться.
  2. Если пользователь заполнил first_name и last_name , но нет display_name , будут отображаться оба имени
  3. Если пользователь заполнил только first_name , отобразится first_name .
  4. Если только пользователь заполнено last_name , будет отображаться last_name .
  5. Если все остальное не удается, отображается идентификатор пользователя, например user123
  6. Если ни один из ключей массива не присутствует или параметр равен 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;
}
6
задан Stephen 28 September 2010 в 15:44
поделиться