Tek gerçek deyimi ile Koşullu operatör

8 Cevap php

I want to set a variable to a value, but only if a condition is true.
Instead of doing the following:

if($myarray["foo"]==$bar){  
    $variablename=$myarray["foo"];  
}

Bu değişken isimleri uzun, ya da ben yapmak istediğim oldukça basit zaman belki, diziler içerir ise oldukça uzun olarak sona erebilir - bir koşul doğruysa bir değer ayarlayın.

Ben koşullu operatörü, böyle bir şey kullanmak istiyorum:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......

I don't deyimi false ise değişken tüm set olmak istiyorum çünkü Ama bu başarısız olur.

Temelde, ne yapmaya çalışıyorum ilk örnek daha kısa olduğunu. Belki koşullu operatör olsa yol değildir ...

Herkes herhangi bir öneriniz var mı?

8 Cevap

IMO, sizin örnek kod daha kısa yapmak için en iyi yoldur:

if($myarray["foo"] == $bar)
    $variablename = $myarray["foo"];

Bilginize, hakkında soruyorsun işletmecinin adı "üçlü operatör" değil, bu the conditional operator.

Madem sordun, aslında size soruyoruz ne yapmak koşullu operatörü kullanabilirsiniz bir yoldur:

$myarray['foo'] == $bar ? $variablename = $myarray['foo'] : null;

ama bu biraz horrifically çirkin ve çok unmaintainable bulunuyor.

Bu çok daha kısa almaz:

if($condition) $var = $value;

Bunu yapabilirdi, ama ben oldukça okunmaz ve aptalca olmaz gibi:

$myarray["foo"] == $bar ? $variablename = $myarray["foo"] : 0;

veya

$myarray["foo"] == $bar && $variablename = $myarray["foo"];

Var "sorun" gerçekten bir sorun değildir. Sizin örnek kod çok açık ve sürdürülebilir olduğunu. Ben gerçekten gibi bırakın söyleyebilirim.

Parantez Sen-kaldırmak olabilir, ama bu bakılabilirlik üzerinde bir etkisi olacaktır.

Diğer alternatif bir set_if_true (karışık array, string anahtarı, boolean koşullu) sarıcı işlevi yaratmak için olduğunu. Bu iyi bir seçenek olduğunu gerçekten ne oluyor, ancak özel uygulamasına bağlıdır gizler. (Örneğin bir yapılandırma türü nesne veya önbelleğe arka uç için)

Sizin doğru, üçlü gitmek için yol değildir. Bu deyimi else if ve parça işlemek için var.

Sadece deyim eğer düzenli sopa ile.

if($myarray["foo"]==$bar) $variablename=$myarray["foo"];

[(1)] Sen üçlü operasyonun else kısmında orijinal ifadeyi koyabilirsiniz, ancak ifadenin tek bir değerlendirme garanti istiyorsanız, o zaman geçici bir değişken ve bir {kullanmak gerekecektir } deyimi.

Üçlü o yüzden üçlü eserler yazılmış olabilir olsa bile, yol değildir.

Sebebi şudur: Eğer diğer geliştiriciler okumak için kod garip yapacak, bunun amaçlanan olmayan bir şekilde kullanmaya çalışıyoruz.

Yanlış durumda kendisine değişkeni ayarlayın:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename