2011-08-06 12 views
5

Bazı ilginç kullanımlara rastladım || Birisi oluyor tam olarak ne onaylamak olabilir (Anladığım, ben gelecekte bunu kendim kullanabilirsiniz) eğer bir dönüş komutu operatör ve bunu takdir ediyorumBir dönüş komutunda OR (||) kullanımının onayı

kod

 
    return (
     empty($neededRole) || 
     strcasecmp($role, 'admin') == 0 || 
     strcasecmp($role, $neededRole) == 0 
    ); 

$ neededRole olduğunu
Eğer $neededRole boş, başka kontrollerine ihtiyaç olduğunu: $ ve rolü ben okuyorum ya null, 'yönetici' veya 'yönetici'

bulunmaktadır. Geri dönün (ve denetimi durdurun)
($role == 'admin') ise, gerekli rol ne olursa olsun erişime izin verin.
, ($role == $neededRole) numaralı telefona geri dönün ve erişim izni verin. Doğru (ve denetimi durdurun)

Sanırım, denetimin durduğu bir "doğru" değerine ulaştıktan sonra ve satırın sonuna "true" olmaksızın ulaşırsa, varsayılan olarak false olarak kabul edilir.

İşarete yakın mıyım?

+0

bir örneğe bakın haklısın, ben daha o kadar okumak bilmek isteriz –

cevap

7

Evet, haklısınız. Buna short-circuit evaluation denir. Tüm koşullar false olarak değerlendirilirse, son dönüş değeri, yanlış olan false || false || false olacaktır.

Bir yan not olarak, bu aynı zamanda && işleciyle de çalışır, ancak ilk ifade bir false değeriyle sonuçlandığında değerlendirmeyi durdurur.

0

Evet,

Bu teknik için bir isim varsa, eklemek unuttum manual

// foo() will never get called as those operators are short-circuit 
$a = (false && foo()); 
$b = (true || foo()); 
$c = (false and foo()); 
$d = (true or foo());