2011-08-06 26 views
5

Tôi đã xem xét một số cách sử dụng thú vị của || nhà điều hành trong một lệnh trở lại, và sẽ đánh giá cao nếu ai đó có thể khẳng định chính xác những gì đang xảy ra (nếu tôi hiểu nó, tôi có thể sử dụng nó bản thân mình trong tương lai)Xác nhận sử dụng OR (||) trong lệnh trả về

Mã này là

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

$ neededRole và $ vai trò hoặc là null, 'admin' hoặc 'manager'

Tôi đọc nó là:
Nếu $neededRole trống, không cần kiểm tra thêm. Trả lại đúng (và ngừng kiểm tra)
Nếu ($role == 'admin') thì cho phép truy cập, bất kể vai trò được yêu cầu. Trả về true (và ngừng kiểm tra)
nếu ($role == $neededRole) thì cho phép truy cập. Trả lại đúng (và ngừng kiểm tra)

Tôi đoán rằng khi đạt đến 'đúng' là việc kiểm tra dừng lại, và nếu nó đến cuối dòng mà không có 'true', nó sẽ mặc định là false.

Tôi có gần điểm không?

+0

Quên để thêm, nếu có một tên cho kỹ thuật này, tôi rất muốn biết để đọc lên trên nó hơn nữa –

Trả lời

7

Có, bạn đã chính xác. Điều này được gọi là short-circuit evaluation. Giá trị trả lại cuối cùng nếu tất cả các điều kiện được đánh giá là false sẽ là false || false || false là false.

Lưu ý phụ này cũng hoạt động với toán tử &&, nhưng nó dừng đánh giá khi biểu thức đầu tiên dẫn đến giá trị false.

0

Vâng, bạn là đúng

Xem ví dụ trong 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()); 
Các vấn đề liên quan