Bu if / elseif ifadeleri iç içe bir daha zarif bir çözüm nedir?

0 Cevap php

Ben kullanıcı profilleri ile kullanıcıları içeren bir web sitesi inşa ediyorum. Profilde alanların çoğu isteğe bağlıdır.

Orada kullanıcı tarafından oluşturulan içeriğin bir sürü için bir fırsat olduğunu ve bu yüzden sitede (yorum, mesaj, vb) pek çok farklı yerlerde bu içeriğin yazarı göstermek gerekir. Kullanıcının profilinde, o (isteğe bağlı) onun "ilk isim", onun "soyadını" ve "görünen ad" doldurmak mümkün değildir.

Yazar görüntülemek için, ben bu alanlarda sağlanan bir dizi bakar ve tercih bu sırayla, kullanıcı için en uygun adını döndüren bir yardımcı yöntem yazdı:

  1. Kullanıcı display_name doldurdum, bu görüntülenir.
  2. Kullanıcı first_name ve last_name doldurdum, ancak hiçbir display_name, hem adlarını görüntüler eğer
  3. Kullanıcı sadece doldurulacak ise first_name, gösterecek first_name.
  4. Kullanıcı sadece doldurulacak ise last_name, gösterecek last_name.
  5. Bütün bunlardan başarısız olursa, bir kullanıcı kimliği görüntülenir yani user123
  6. Dizi anahtarları hiçbiri mevcut veya parametre NULL ise, isim NULL olarak görüntülenir

Yöntem harika çalışıyor, ama çirkin. If / else ifadeleri iç içe bir alternatif olan bu güzelleştirmek için bir yolu olmalı.

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;
}

0 Cevap