2012-04-22 36 views
5

Ok vì vậy tôi vừa nhận ra một số hành vi khó hiểu với PHP và muốn biết tại sao điều này xảy ra. Vì vậy, chạy mã này:Tuyên bố ternary PHP sử dụng 'và'

var_dump(true and false ? 'one' : 'two'); 

Đầu ra

boolean true 

thay vì 'hai' như bạn mong chờ ... Vấn đề dường như được sử dụng 'và'.

Chạy:

var_dump(true && false ? 'one' : 'two'); 

đầu ra

string 'two' (length=3) 

cũng giống như mong đợi. Tại sao sử dụng 'và' thay vì '& &' gây ra hành vi kỳ lạ này? Họ có được cho là giống nhau không?

+0

Tôi rất muốn biết câu trả lời cho điều này. Đoán của tôi là thứ tự .. Trong trường hợp đầu tiên, false được sử dụng cho toán tử bậc ba xuất hiện đúng và 'hai', đánh giá là đúng ... – DanRedux

+0

Có vẻ như tôi đã đúng. : P – DanRedux

Trả lời

5

Đó là vì ?: có cao hơn precedence hơn and, nhưng thấp hơn &&.

+0

Ồ, điều đó thật ngớ ngẩn. Có một lý do hợp lý 'và' và' && 'không có quyền ưu tiên ngang nhau không? – dtbarne

+0

Bây giờ điều đó không có ý nghĩa gì về lý do tại sao họ làm điều đó ... bây giờ tôi nhận ra rằng sử dụng $ một và $ hai || $ ba chẳng hạn không giống như $ one && $ hai || $ ba. Cám ơn vì cái này. – Zaptree

+1

@dtbarne @Zaptree: Có một lý do khá đơn giản để có hai toán tử logic và lôgic riêng biệt với các tiền lệ khác nhau. '||' và '&&' được sử dụng để nối và thay thế các biểu thức boolean, trong khi 'hoặc' và' và' được sử dụng các trường hợp như '$ result = mysql_query (...) hoặc die (mysql_error());' (mà rõ ràng là mã xấu), tức là chúng có nhiều logic xen kẽ hoặc xen kẽ. – NikiC

3

Đó là vì and có mức độ ưu tiên thấp hơn &&?:.

+0

cảm ơn câu trả lời, bạn ở đâu sau 1 giây so với Radu: P – Zaptree

Các vấn đề liên quan