PHP nedir?

9 Cevap php

Birisi ? ve : operatörleri PHP ne açıklayabilir misiniz?

örneğin:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) 

9 Cevap

Bu conditional operator olduğunu.

$x ? $y : $z

"aksi takdirde $z kullanmak $x doğruysa, o zaman $y kullanın" anlamına gelir.

İnsanlar ?: "üçlü operatörü" olduğunu söyleyecektir. Bu yanlış. ?:, üç işlenen anlamına gelir a üçlü operatörüdür. İnsanlar genellikle belirli bir dil olan tek üçlü operatördür, çünkü onun ismi "üçlü operatörü" olduğunu düşünerek rüzgar.

Ben ne zaman ve neden bunları kullanmak ve zaman değil, bunları kullanmak için bunları kullanmak için nasıl, ne olduklarını, ternaries üzerinde biraz yazmak için gidiyorum.

What is a ternary operator?

Bir üçlü ? : if ve else için kısaltmadır. Bu temelde bu. this page resmi bir açıklama daha aşağı yönlü "Üçlü Operatörler" yarısını bakın.

As of PHP 5.3:

PHP 5.3 'ten beri, bu üçlü operatörü orta bölümünü terk etmek mümkündür. İfade ifade1:? Ifade3 döner expr1 DOĞRU olarak değerlendirirse Deyim1 ve ifade3 aksi.

How are ternaries used?

Burada normal if deyimi nasıl göründüğü:

if (isset($_POST['hello']))
{
    $var = 'exists';
}
else
{
    $var = 'error';
}

Adlı bir üçlü içine aşağı kısaltmak edelim.

$var = isset($_POST['hello']) ? 'exists' : 'error';
                 ^            ^     ^    ^     |
                 |           then   |   else   |
                 |                  |          |
          if post isset         $var=this   $var=this

Çok daha kısa, ama okumak için belki zor. Onlar önceki örnekte $var gibi değişkenleri ayarlamak için kullanılır, ama aynı zamanda echo ile bunu yapabilirsiniz, ve bir değişken sahte olup olmadığını kontrol etmek için değil sadece:

$isWinner = false;

// Outputs 'you lose'
echo ($isWinner) ? 'You win!' : 'You lose';

// Same goes for return
return ($isWinner) ? 'You win!' : 'You lose';

Why do people use them?

Ben ternaries seksi olduğunu düşünüyorum. Bazı geliştiriciler göstermek istiyorum, ama PHP 5.4 'ın en son short echos gibi diğer özellikleri ile birlikte bazen especially, kodunuzda sadece look nice ternaries.

<?php 
    $array = array(0 => 'orange', 1 => 'multicoloured'); 
?>

<div>
    <?php foreach ($array as $key => $value) { ?>
        <span><?=($value==='multicoloured')?'nonsense':'pointless'?></span>
    <?php } ?>
</div>

<!-- Outputs:
    <span>
        pointless
    </span>
    <span>
        nonsense
    </span> 
-->

(Eğer MVC paradigma endişelerinizi ayırarak eğer) bir 'görünümü / şablon' içinde olduğunuzda, biraz konu dışı oluyor, mümkün olduğunca orada az sunucu tarafı mantığını istiyorum. Yani, ternaries ve diğer kısa-el kodu kullanarak bazen ileriye iyi yoludur. "Diğer kısa-el kodu" ile, yani:

if ($isWinner) :
    // Show something cool
endif;

Note, I personally do not like this kind of shorthand if / endif nonsense

How fast is the ternary operator?

Mikro optimizasyonlar GİBİ insanlar. Onlar sadece bunu. Yani bazıları için, if / else ifadeleri, normal ile karşılaştırıldığında ternaries gibi hızlı şeyler ne kadar bilmek önemlidir.

Okuma this post, farklılıklar 0.5ms üzeresiniz. Bu bir sürü!

Oh hayır o değil, bekleyin. Art arda, üst üste bunlardan binlerce ve binlerce yapıyoruz eğer sadece bir çok şey. Eğer olmayacaktır hangi. Bu yüzden burada kesinlikle anlamsız, hiç hız optimizasyonu konusunda endişelenmeyin.

When not to use ternaries

Sizin kodu olmalıdır:

  • Kolay okunabilir
  • Kolay anlaşılabilir
  • Değiştirmek kolay

Açıkçası bu kişilerin istihbarat tabidir ve koduna bakmak için gelirken bu tür kavramları anlama bilgisi / genel düzeyini kodlama. Önceki örneklerde olduğu gibi tek bir basit üçlü tamam, aşağıdaki gibi bir şey, ancak, not yapıyor olması gereken:

echo ($colour === 'red') ? "Omg we're going to die" :
     ($colour === 'blue' ? "Ah sunshine and daisies" :
     ($colour === 'green' ? "Trees are green"
     : "The bloody colour is orange, isn't it? That was pointless."));

Bu üç nedenden dolayı anlamsız:

  • Gülünç uzun üçlü gömme
  • Sadece switch deyimi kullandım
  • Bu, ilk etapta turuncuydu

Conclusion

Ternaries gerçekten basit ve çok hakkında kadar çalıştı şey vardır. O gerçekten bir fark yapmaz, any gelişmeleri hızlandırmak düşünmüyoruz. Onlar simple ve look nice zaman bunları kullanın ve her zaman kod gelecekte başkaları tarafından okunabilir olacaktır emin olun. Hiçbir ternaries demektir, o ternaries kullanmayın.

Bu üçlü operatör denir. İlk ifadesi true olarak değerlendirilirse, HTTPS_SERVER HTTP_SERVER seçilir else kullanılır.

Bu deyimi aşağıdaki gibi, yukarıdaki kod da yeniden yazılabilir temelde bir kestirme bulunuyor:

if ($request_type == 'SSL') {
   HTTPS_SERVER;
} else {
   HTTP_SERVER;
}

Bu bazen üçlü koşullu operatörü olarak bilinir. Üçlü Bu x ? y : z gibi üç parametre, sahip olduğu anlamına gelir. x doğruysa Temelde, bunu denetler; Bu ise, daha sonra, y yerine koymak bu işlemin başka bir z.

$hello = $something ? "Yes, it's true" : "No, it's false";

Koşullu operatör ?: Bir durumunu kontrol ve durumun değerine bağlı olarak bir değer seçmek için kullanılan bir operatördür. Bu, aşağıdaki biçimde ifade edilir:

             variable = condition ? expression1 : expression2;

Aşağıdaki gibi çalışır ...

  1. İlk olarak, condition değerlendirilir.
  2. condition doğruysa, o zaman expression1 evalauated edilir. Ve değeri expression1 variable atanır.
  3. condition yanlış ise, o zaman expression2 değerlendirilir. Ve değeri expression2 değişkene atanır.

Örneğin:

                    x = (a>b) ? 5 : 9

Bu bağlamda, x, ilk durumu (a> b) değerlendirilir. Bu koşul doğruysa olursa, o zaman x değeri 5 olur (yani, x = 5) olacaktır. Ama durum (a> b) yanlış olur, o zaman x değerini elde eğer 9 (yani, x = 9).

Ternary Operator

Sometimes conditional operator ?: is also called a ternary operator. This is so because it involves three operands. Örneğin:

            x ? y : z

Burada, x, y ve z, üç işlenen bulunmaktadır. Koşul x doğruysa, o zaman değer y aksi z değeri atanır atanır.

Bu cümleler IF yazma kısa bir yoludur. Ayrıca Java, Javascript ve diğerleri gibi diğer dillerde kullanılır.

Sizin kodu:

$protocol = $request_type == 'SSL' ? HTTPS_SERVER : HTTP_SERVER;

Bu gibi yazılabilir:

if($request_type == 'SSL')
    $protocol = HTTPS_SERVER;
else
    $protocol = HTTP_SERVER;

Bu temelde eğer yazma bir if else süslü bir yoldur.

Bazı okumak onun kolay söylüyorlar, bazıları değildir söylüyorlar.

ternary operator at wikipedia

John T söylediği gibi, bu üçlü operatörü olarak adlandırılır ve temelde bir if / else deyimi bir kestirme versiyonudur. Sizin örnek, if / else deyimi tam olarak, okurdum;

if($request_type == 'SSL')
{
    HTTPS_SERVER;
}
else
{
    HTTP_SERVER;
}

Bu açıklama ise tek satır:

condition ? true : false

Sizin durumda if ifadesi sıradan bir tercüme, olurdu:

if($request_type == 'SSL') HTTPS_SERVER;
else HTTP_SERVER;