php - 这些嵌套的 if/elseif 语句的更优雅的解决方案是什么?

标签 php string user-input helper

我正在构建一个包含用户和用户配置文件的网站。配置文件中的许多字段都是可选的。

有很多用户生成内容的机会,因此我需要在网站的许多不同位置(评论、帖子等)显示此内容的作者。在用户的个人资料中,他能够(可选地)填写他的“名字”、“姓氏”和“显示名称”。

为了显示作者,我编写了一个辅助方法来查看提供的这些字段的数组,并按照以下优先顺序返回最适合用户的名称:

  1. 如果用户填写了display_name,就会显示出来。
  2. 如果用户填写了first_namelast_name,但没有填写display_name,它将显示这两个名字
  3. 如果用户只填写了first_name,它会显示first_name
  4. 如果用户只填写了last_name,则显示last_name
  5. 如果所有其他方法均失败,将显示用户 ID,即 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;
}

最佳答案

public function nameify($names = NULL) {
    if ($names) {
        if (!empty($names['display_name'])) {
            return $names['display_name'];
        }
        if (!empty($names['first_name'])) {
            $name = $names['first_name'];
        } 
        if (!empty($names['last_name'])) {
            $name .= ' ' . $names['last_name'];
        }
        if (empty($name) && !empty($names['id'])) {
            $name = 'user' . $names['id'];
        }
    }
    return $name ? ltrim($name) : 'NULL';
}

首先设置默认值,如果没有其他匹配则返回它。然后,因为我们总是希望返回显示名称(如果有的话)。

编辑:调整以防止返回“NULL”

关于php - 这些嵌套的 if/elseif 语句的更优雅的解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814554/

相关文章:

php - Exec() 为FFMPEG创建两个不同的进程

sql-server - 用文本更新 varchar 列的最快方法

c# - 如何在同一行中获取用户输入?

java(eclipse)石头剪刀布代码,选择一个简单的输入,并生成石头剪刀布的输出

javascript - 在 JavaScript 中克隆表格行并删除值

php - 根据路由参数将 Doctrine Entity 注入(inject) Symfony Controller

PHP 不会显示任何错误

javascript - 从 XML feed 绘制多个标记时遇到问题

python - "pythonic"填充词袋的方法

Python - 要列出的字符串