PHP perl gibi bir varsayılan atama deyim var mı?

2 Cevap

Ben var olabilecek bir değer varsayılan istiyorsanız Perl, örneğin bir parametre geçirildi, ben bunu yapabilirsiniz:

  $var = parm->('variable') || 'default';

PHP benzer bir şey mi var yoksa ben atadıktan sonra değerini kontrol etmek, ve hala null ise o varsayılan değeri atanır?

2 Cevap

Tam olarak değil.

PHP 5.3 onlar "üçlü kısayol" dediğimiz tanıttı.

// old way
$foo = $foo ? $foo : 'default';

// new way in 5.3
$foo = $foo ?: 'default';

Olmadığı, hatta bir kısayol kadar ve sadece kısa-devre-mümkün değerlerini işleri (0 $foo Bu kısayol başarısız olur için geçerli bir değer ise.)

Aksi takdirde, eski, sert, manuel şekilde kontrol tipi / varlığını yapmak gerekecek.

Ayrıca imza parametreler için varsayılan değerler belirtebilirsiniz - değil emin size tam olarak ne alıyoruz ama burada eğer eylem

function foo( $bar = 'baz' )
{
  echo $bar;
}

foo(); // baz

Ben standart üçlü PHP defacto olduğunu düşünüyorum:

$var = $foo ? $foo : 'default';
echo $foo ? $foo : 'default';

Ancak bazı durumlarda biraz temiz olabilir bir çift diğer hile vardır:

//these are very close but can't be echo'd inline like a ternary
$var = $foo OR $var = 'default';//assigning a default to $var if $foo is falsy
($var = $foo) || $var = 'default';//same effect as above

isset($var) || $var = 'default';//making sure $var is set

İşte satır içi echo'd olabilir biri:

$var = ($foo) ?: 'default';//partial ternary
echo ($foo) ?: 'default';//aka ternary shortcut (PHP 5.3+ only)

Önemli bir not vars ayarlanmadýnda bu bir sürü hataları yayarlar olabilir: (

echo @($foo) ?: 'default';//@ fixes it but isn't considered good practice

Onlar iç içe olduğunuzda üçlü yaklaşım kullanarak değil değer olabilir bir yerdir:

$user = (($user)?$user:(($user_name)?$user_name:(($user_id)?$user_id:'User')));
echo 'Welcome '.$user;//is pretty messy

($user = $user) || ($user = $user_name) || ($user = $user_id) || ($user = 'User');
echo 'Welcome '.$user;//is more readable

Her neyse, çok eğlenceli keşfetmek.