Kullanıcı profilleri olan kullanıcıları içeren bir web sitesi yapıyorum. Profildeki alanların çoğu isteğe bağlıdır.Bu nested if/elseif ifadeleri için daha zarif bir çözüm nedir?
Çok sayıda kullanıcı tarafından oluşturulan içerik için bir fırsat var ve bu yüzden bu içeriğin yazarını sitenin birçok farklı yerinde (yorum, yayın vb.) Göstermem gerekiyor. Kullanıcının profilinde, (isteğe bağlı olarak) "ilk adı", "soyadı" ve "görünen adı" nı doldurabilir.
yazarı görüntülemek için ben tercih bu sırada bu alanların bir sağlanan dizide arama yaparak kullanıcı için en uygun isim döndüren bir yardımcı yöntemini yazdı:- kullanıcı doldurduğu takdirde
display_name
, bu görüntülenecektir. kullanıcı sadecefirst_name
doldurduğu takdirde - kullanıcı doldurduğu takdirde
first_name
velast_name
, ancak hiçbirdisplay_name
, bununfirst_name
gösterecektir, hem adları - gösterecektir.
- Kullanıcı yalnızca
last_name
doldurduysa,last_name
gösterecektir. - Bütün bunlardan, bir kullanıcı kimliği dizisi anahtarların hiçbiri mevcut veya parametre NULL ise, adı yöntem inşaat büyük
NULL
olarak gösterecektir user123
if(empty($names['display_name'])) {
$name = $names['first_name'] . ' ' $names['last_name'];
else
$name = $names['display_name'];
$name = trim($name);
if(empty($name))
$name = 'user'.$names['id'];
if(empty($name))
$name = 'NULL';
:
public function nameify($names = NULL) {
$name = 'NULL';
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 ($name=='NULL' && !empty($names['id'])) {
$name = 'user' . $names['id'];
}
}
return $name;
}
Sadece 'return' operatörü kötüye. Sadece işlevin sonunda değil, her yerde çağrılabilir. Ve daha fazla yürütmeyi * sonlandıracak *. Tıpkı goto'nun yaptığı gibi. X3'un örnek –