PHP koşullu operatörü kısayol?

6 Cevap php

PHP aşağıdaki deyimi için bir kısayol olup olmadığını bilen var mı?

$output = isset($some_value) ? $some_value : "Some Value Not Set";
echo $output;

$ Some_value muhtemelen aslında çok uzun ve sık sık çalıştırmak Bu şey gibi bir işlev içerir:

$output = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value) ? $this->db->get_where('my_db',array('id'=>$id))->row()->some_value) : "Some Value Not Set";
echo $output;

Bu yapan bir operatör veya işlev olması gerektiğini görünüyor. Ben kolayca birini yazabilirsiniz, ve ben bu cevap arıyor değilim, ama herkes yerleşik bir kısayol bilir doğrusu eğer.

6 Cevap

Eğer ?, sen ({[sonra bu değişkeni (atamaları atanan değer döndüren ifadeler çünkü) test içindeki bir değişkene atayın ve kullanabilirsiniz sonra testi uzun ifadeyi yeniden gerekiyorsa 0)]}:

$output = ($some_value = $this->db->get_where('my_db', array('id' => $id))->row()->some_value))
  ? $some_value 
  : "Some Value Not Set";
echo $output;

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.

http://php.net/manual/en/language.operators.comparison.php

Bu amaç için koşullu operatörü kullanmadan önce veritabanı arama sonuçları ile bir değişkeni ayarı gerekmektedir. Sizin örnek iki veritabanı çağrısı yapar.

Örneğin:

$output = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value);
$output = $output ? $output : "Some Value Not Set";
echo $output;

Ve kurulan bu ile, bu gerçekten bir genel amaçlı eğer-sonra kısayol olarak kullanılmak üzere verilmemiştir koşullu operatörü, kullanmak değil gerçekten akıllıca değil iyi bir durumdur.

Sen boşluklarla korkuyor gibi görünüyor. Kullanın! Liberal! Sırasıyla, soru işareti ve iki nokta üst üste önce ve sonra bir boşluk eklemek eğer kod okumak için çok eaiser olduğunu. Açıklamalarınız çok uzun olsun, bir yeni satır ekleyin. Deneyin, size zarar vermez.

Ben koşullu operatör fonksiyon çağrıları ve okunabilirliği tasarruf uğruna kısayol :) olduğuna inanıyorum, ben önce bir değişkene değer tasarruf öneririz.

$some_value = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value);
$output = $some_value ? $some_value : "Some Value Not Set";
echo $output;

: Iyi yolu,

$output = $this->db->get_where('my_db',array('id'=>$id))->row()->some_value)
echo $output =($output)?$output:"Some Value Not Set";

Sadece sonra bir kez yürütür!