2011-08-06 9 views
5

Natknąłem się na pewne interesujące użycie || Operator w poleceniu powrotu, i byłby wdzięczny, gdyby ktoś mógł potwierdzić dokładnie, co się dzieje (jeśli dobrze rozumiem, mogę go używać się w przyszłości)Potwierdzenie użycia OR (||) w poleceniu return

Kod jest

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

$ neededRole i $ rola ma wartość zerową, "admin" lub "menedżer"

Przeczytałem ją jako:
Jeśli $neededRole jest pusta, nie są potrzebne dalsze sprawdzenia. Zwróć true (i zatrzymaj sprawdzanie)
Jeśli zezwalasz na dostęp ($role == 'admin'), bez względu na wymaganą rolę. Zwróć true (i zatrzymaj sprawdzanie)
, jeśli ($role == $neededRole) następnie zezwól na dostęp. Zwróć true (i zatrzymaj sprawdzanie)

Zgaduję, że po osiągnięciu "prawda", że sprawdzanie zatrzymuje się, a jeśli dotarł do końca wiersza bez "true", będzie domyślnie false.

Czy jestem blisko znaku?

+0

Zapomniałeś dodać, jeśli jest nazwa tej techniki, chciałabym wiedzieć, aby czytać dalej na nim –

Odpowiedz

7

Tak, masz rację. Nazywa się to short-circuit evaluation. Ostateczna wartość zwracana, jeśli wszystkie warunki zostaną ocenione jako fałszywe, będzie równa false || false || false, która jest fałszywa.

Na marginesie, działa to również z operatorem &&, ale przestaje on być oceniany, gdy pierwsze wyrażenie daje wartość false.

0

Tak, masz rację

Zobacz przykład w 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());