PHP fonksiyonu birleşme?

7 Cevap php

Birçok programlama dilleri kaynaşabilecek fonksiyonunu (NULL olmayan ilk değeri döndürür, example) var. PHP, ne yazık ki, yok.

Ne PHP birini uygulamak için iyi bir yol olurdu?

7 Cevap

?:: yapar php 5.3 yeni bir operatör var

// A
echo 'A' ?: 'B';

// B
echo '' ?: 'B';

// B
echo false ?: 'B';

// B
echo null ?: 'B';

Source: http://www.php.net/ChangeLog-5.php#5.3.0

İlk google "php birleştiği" için çarptı.

function coalesce() {
  $args = func_get_args();
  foreach ($args as $arg) {
    if (!empty($arg)) {
      return $arg;
    }
  }
  return NULL;
}

http://drupial.com/content/php-coalesce

? Operatörü: ben gerçekten çok seviyorum. Ne yazık ki, henüz benim üretim ortamında uygulanmadı. Yani ben bu eşdeğerini kullanın:

function coalesce() {
  return array_shift(array_filter(func_get_args()));
}

Eğer bu fonksiyon belirli türleri ile çalışmak istiyorum tam olarak nasıl tespit emin olun. PHP tip denetimi veya benzer işlevleri geniş bir çeşitlilik vardır, bu nedenle nasıl çalıştıklarını biliyorum emin olun. Bu is_null bir örnek karşılaştırma () ve boş ()

$testData = array(
  'FALSE'   => FALSE
  ,'0'      => 0
  ,'"0"'    => "0"	
  ,'NULL'   => NULL
  ,'array()'=> array()
  ,'new stdClass()' => new stdClass()
  ,'$undef' => $undef
);

foreach ( $testData as $key => $var )
{
  echo "$key " . (( empty( $var ) ) ? 'is' : 'is not') . " empty<br>";
  echo "$key " . (( is_null( $var ) ) ? 'is' : 'is not')  . " null<br>";
  echo '<hr>';
}

Gördüğünüz gibi, boş () tüm bunlar için true değerini döndürür, ancak is_null () sadece 2 tanesi yapar.

Nedeniyle uninitalised değişkenler ve dizi endeksleri PHP'nin tedavisi, kaynaşabilecek fonksiyonu her türlü kullanımı sınırlı olduğu dikkati çekiyor. Ben bunu yapmak mümkün olmak isterdim:

$id = coalesce($_GET['id'], $_SESSION['id'], null);

Ama bu irade, çoğu durumda, PHP E_NOTICE ile hata neden olur. Kullanmadan önce bir değişkenin varlığını test etmek için tek güvenli yolu boş () veya isset () doğrudan kullanmaktır. Eğer birleştiği tüm seçenekler başlatılmak bilinen biliyorsanız Kevin tarafından önerilen üçlü operatörü en iyi seçenektir.

I Ethan Kent tarafından yayınlanmıştır cevaba genişleyen ediyorum. Bu cevap nedeniyle coalesce fonksiyonu genelde ne değildir array_filter işleyişinin, yanlış değerlendirmek null olmayan argümanlar atar. Örneğin:

echo 42 == coalesce(null, 0, 42) ? 'Oops' : 'Hooray';

Oops

Bunun üstesinden gelmek için, ikinci bir argüman ve fonksiyon tanımı gereklidir. callable function array_filter olsun veya sonuç dizisine geçerli dizi değer katmak için söylüyorum sorumludur:

// "callable"
function not_null($i){
    return !is_null($i);  // strictly non-null, 'isset' possibly not as much
}

function coalesce(){
    // pass callable to array_filter
    return array_shift(array_filter(func_get_args(), 'not_null'));
}

Bu sadece array_filter için 2. argüman olarak isset veya 'isset' geçebileceği eğer güzel olabilir, ama böyle bir şans olacaktır.

Şerefe

Şu anda bu kullanıyorum, ama PHP 5 yeni özellikleri ile gelişmiş olabilir değil merak ediyorum.

function coalesce() {
  $args = func_get_args();
  foreach ($args as $arg) {
    if (!empty($arg)) {
    return $arg;
    }
  }
  return $args[0];
}