2015-03-31 20 views
9

Üçlü Operatörü PHP'de "else" ifadesini kapatmadan kullanabilir misiniz? Denedim ve hatalar dönüyor. Google arama hiçbir şey üretmiyor, bu yüzden cevabın muhtemelen hayır olduğunu düşünüyorum. Sadece burada kontrol etmek istedim. Örneğin: $ test varsa, yalnızca $ new_variable değerini ayarlayacaktır. Şimdi, $ test ayarlanmamışsa $ new_variable için boş bir değişken döndürenÜçlü İşleç Kullanarak Else deyimini kullanmadan PHP

$new_variable = (isset($testing) ? $testing : ""); 

. Ayarlanmamışsa boş bir değişken istemiyorum, $ new_variable'ın yaratılmasını istemiyorum.

Ben
$new_variable = (isset($testing) ? $testing); 

çalıştı ve bu hataları döndü. Ben de
$new_variable = (isset($testing) ? $testing :); 

çalıştı ve aynı zamanda hataları döndü. Ekli bir deyim olmadan Üçlü Operatörü kullanmanın bir yolu var mı, yoksa uzun yazı yazdım mı?

DÜZENLEME: Rizier123 tavsiyelerine uyarak ben NULL'A denklemin 'başka' bir bölümünü ayarlama çalıştı, ama yine de bir dizi için bir anahtar ekleme biter. Değer orada yok, ama anahtar, planlarımı mahvediyor. Lütfen daha fazla açıklamama izin verin.

kod formdan $ _POST değişkenler bir demet alıp sonra API yöntemi çağrıları için kullanılan bir stdClass parametreler için bunları kullanmak için gidiyor. API çağrısı için aynı değişkene uygulandıklarından, form değişkenlerinden bazıları mevcut olmayacaktır, ancak kullanıcı yalnızca birini seçebilir. Örnek olarak, seçtiğiniz öğeyi stdClass'a aktarılan ve diğer 2'si bulunmayan 3 öğeyi seçebilirsiniz.

bu çalıştı:

$yes_this_test = "IDK"; 
$setforsure = "for sure"; 
$list = new stdClass; 
$list->DefinitelySet = $setforsure; 
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL); 
$list->MaybeSet = (isset($testing) ? $testing : NULL); 
print_r($list); 

Ama (isset ($ testi) sonra gelir, çünkü belli ki MaybeSet null olarak alır (isset ($ yes_this_test) ve

stdClass Object ([DefinitelySet] => for sure [MaybeSet] =>) 

döndürür

Kazandım $ _POST değişkenlerinin hangi sırayla geldiğini bilmem, bu yüzden listenin doğru sırada işlenmesini sağlayacak şekilde yapılamıyorum.

Artık bir şey yapabileceğimi biliyorum Bunları onlarca yazmak zorunda olduğu

if (isset($yes_this_test) { 
    $list->MaybeSet = $yes_this_test; 
} 
elseif (isset($testing)) { 
    $list->MaybeSet = $testing; 
} 

Ama orada umuyordum, mantık bu tür bir kısaltmadır oldu. If/elseif ifadeleri için kullanılan Üçlü Operatöre benzer bir operatör var mı?

+1

Bir başka seçenek de, kaşlı ayraçlar olmadan if ifadesini kullanmaktır. Bir üçgene benzer bir çizgi üzerinde de olabilir. 'if (isset ($ testing)) $ new_variable = $ test;'. IMO Kıvırcık parantez olmadan hoşlanmam ama sadece mümkün olduğunu söylüyorum. IMO, NULL olarak NULL olarak ayarlamak için daha iyi olurdu, çünkü Nier ise eğer isset false değerini döndürür. 'isset ($ nullVar)' false döndürecektir. –

+0

[Üçlü Operatörlerin olası kopyası. Tek taraflı bir eylem için mümkün mü?] (Http://stackoverflow.com/questions/14520949/ternary-operators-possible-for-a-one-sided-action) –

cevap

4

Bunun gibi NULL olarak ayarlayın: Eğer değişken bir isset() çek ile sahte dönecekti

$new_variable = (isset($testing) ? $testing : NULL); 

.

Sen kılavuzda NULL hakkında daha fazla bilgi bulabilirsiniz.

Ve oradan bir alıntı:

özel BOŞ değer hiçbir değeri ile bir değişken temsil eder. NULL, null türünün olası tek değeridir.

  • o NULL sabiti atanan olmuştur: eğer

Bir değişken null olarak kabul edilir.

  • ürününe henüz ayarlanmamıştır.
  • bu unset olmuştur().
  • +0

    Mükemmel! Teşekkür ederim. Her zaman NULL'un boş olarak aynı olduğunu varsaydım. Sanırım daha az almalı ve daha fazla okumalıyım. ;) – Longblog

    +0

    @Longblog Rica ederim! İyi bir gün geçirin: D – Rizier123

    +1

    Bah, aslında şimdi test ettikten sonra, değişkeni bir boş değişken olarak bir listeye ekler. Bunun işe yarayıp yaramadığını bilmiyorum çünkü parametreler olarak $ _POST değişkenlerini kullanan bir dizi parametre için kullanmam gerekecek. $ _POST değişkenlerinin hangi sırada geleceğini bilmiyorum, bu yüzden $ _POST değişkenlerinden biri ayarlanmış olsa bile bir NULL parametresiyle sonuçlanabilir. Yukarıda daha fazla açıklayacağım. – Longblog

    10

    Since PHP 5.3 bunu yapabilirsiniz: Eğer isset ifadesini etkisiz zorunda koşul, yanlış ise

    Gördüğünüz gibi

    !isset($testing) ?: $new_variable = $testing;

    , sadece bir kısmını kullanır.