| = Operatörü | PHP için bir eşdeğer var mı?

5 Cevap

Ben zaten atanmış değil, yalnızca bir değişkeni atamak isteyen kulüpler. Aşağıdaki yapmanın PHP yolu nedir?

$result = null;
$result ||= check1();
$result ||= check2();
$result ||= "default";

Ben standard operators ve is_null fonksiyonunu kontrol, ancak yukarıdaki işlemi yapmanın kolay bir yolu olarak görünmüyor.

5 Cevap

isset() bunu yapmanın olağan yoludur:

if (!isset($blah)) {
  $blah = 'foo';
}

Note: Eğer bir değişkene null atayabilirsiniz ve atanacaktır. Bu isset() ve is_null() so you need to be clear on what you mean by "not assigned". See Null vs. isset() farklı sonuçlar verecektir. Bu aynı zamanda !=/== veya ===/!== istenen sonucu bağlı kullanarak anlam, otomatik tür dönüşümü yaparken dikkatli olmak gereken bir durumdur.

Sen (Perl ||= operatörü olan budur) bunun için çok boolean Steno kullanabilirsiniz. PHP 5.2.x itibariyle Eğer konuşmak gibi bir operatör yoktur. Perl:

$a ||= $b;

eşdeğerdir:

$a = $a || $b;

Siz PHP ikinci formu yapabilir ama PHP type juggling hakkında bazı funky kuralları vardır. Bkz Converting to boolean:

When converting to boolean, the following values are considered FALSE:

Diğer her değer (herhangi bir kaynak dahil) DOĞRU kabul edilir.

Yani sonra:

$a = 0;
$a = $a || 5;

$ A 5 eşit olur Aynen.:

$a = 0;
$b = '';
$c = $a == $b; // true
$d = $a === $b; // false

Bu şeyler için dikkat etmeliyiz.

Php 5.3 den kullanabilirsiniz:

$result = $result ?: check1();

Ben işe yaramaz tanımsız değişken bildirimlerini kapattığım bir yan yararı vardır bu fonksiyon ile geldi. Bu benim için Javascript davranışları yeterince yakın:

function default_value(&$var, $default) {
    return isset($var) ? $var : $default;
}

$want_something = default_value($_POST['mightbeunset'], false);

Nasıl iç içe üçlü operatörlerin bir çift kullanmaya ne dersiniz?

Benim için bu sorunla başa çıkmak için en kolay yoludur. Iç içe geçmiş üçlü operatörleri kullanabilirsiniz beri ve gerekirse daha fazla denetim eklemek gerekir.

$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;

Bu kodun hemen hemen aynı miktarda bulunuyor ve ben seni yanlış ettik sürece .. çalışması gerekir. Bu durumda eğer üzgünüm.

Eğer örnek olarak yayınlanan orijinal kodu ile karşılaştırıldığında, uzunluğu hemen hemen aynıdır:

$result = null; $result ||= check1(); $result ||= check2(); $result ||= "default";
 - vs -
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;

İçiçe üçlü operatörler biraz kafa karıştırıcı olabilir, bu nedenle burada yorumlarla ile var:

    // Is $var set?
	$var = isset($var) ?
		// TRUE: It is, use $var
		$var :
		// FALSE: $var is not set, run check1
		( $i=check1() ) ?
		// TRUE: the function check1 returned valid data
		$i :
		// FALSE: the function check1 returned null or false, run check2
		($i=check2()) ?
		// TRUE:  the function check2 returned valid data
		$i :
		// FALSE: the function check1 returned null or false, set default value
		"default" ;

Ben henüz denemedim, ama yaş için PECL Operator ile oynamak istedim.