2012-06-01 42 views
8

Đây là một câu hỏi mà được bugging tôi trong một thời gian dài và không thể tìm thấy bất kỳ câu trả lời ... Nhận thấy nó được sử dụng khá nhiều bởi khung phát triển Zend,PHP - đảo ngược trật tự trong câu lệnh if

là gì sự khác biệt giữa 2 câu lệnh "if" sau đây? :

if (null === $this->user) { ... } 

if ($this->user === null) { ... } 

Đối với tôi là người đầu tiên trông kinda lẻ;]

Cảm ơn cho câu trả lời.

Trả lời

13

Đây không phải là một sự khác biệt về cách thức kịch bản của bạn hoạt động, nó chỉ là một tiêu chuẩn mã hóa, một đề nghị

lý do tại sao nó được khuyến khích để sử dụng nó theo cách này:

if (null == $this->user) 

là một thực tế rằng nếu bạn nhập nhầm và viết = thay vì == bạn sẽ nhận được một lỗi, trong khi

($this->user = null) 

thay vì

($this->user == null) 

công trình nhưng gây ra lỗi lạ (chuyển nhượng và giá trị cuối cùng được đánh giá là bool thay vì so sánh)

và tôi đoán nó chỉ mở rộng như một thói quen đến nghiêm ngặt toán tử so sánh (===)

Cập nhật: vì tôi thấy vẫn còn một số hoạt động trên chuỗi này thậm chí 3 năm sau khi tôi đăng câu trả lời tôi hình d Tôi sẽ thêm một cái gì đó tôi quên đề cập đến. Loại ký hiệu này được gọi là yoda conditions, bạn có thể đọc thêm về nó trên this wikipedia page chẳng hạn.

+1

Cảm ơn! Chết đơn giản nhưng không thể tìm thấy bất kỳ câu trả lời ... – alchemication

+0

@alchemication Tôi vui vì nó giúp, đó là một câu hỏi hay. +1 – mishu

+0

cũng giống như một lý do thực sự tốt để sử dụng 'is_null ($ var)' hoặc '! Is_null ($ var) 'bất cứ khi nào có thể và thực tế. Đưa ra công việc đoán. – RockyFord

1

Không có sự khác biệt về thứ tự khi so sánh các giá trị.

Có thể dễ dàng hơn cho ai đó đọc hoặc viết mã như vậy, nhưng với tôi, nó giống như viết từ phải sang trái.

1

Thứ tự các yếu tố như vậy so với tôi nghĩ là nhằm ngăn chặn việc gán ngẫu nhiên trong các câu lệnh if.

1

Kết quả sẽ giống nhau, tuy nhiên, kết quả thứ hai là hợp lý. Bạn muốn kiểm tra xem biến là NULL, không nếu NULL là biến ... Lý do để làm điều đó một cách khác xung quanh được mô tả ở đây: http://umumble.com/blogs/Programming/321/

1

Đây được gọi là điều kiện yoda. Ý tưởng là nếu bạn đặt giá trị đầu tiên (chẳng hạn như sai, null, đúng hay bất kỳ điều gì ngắn) sẽ dễ dàng hơn cho một người để quét câu lệnh và nhanh chóng hiểu được ý định của điều kiện.

Ngoài ra, những gì mishu nói :)

1

Nếu bạn vô tình viết:

if (null = $this->user) { ... } 

bạn sẽ nhận được một lỗi cú pháp.

Nếu bạn vô tình viết:

if ($this->user = null) { ... } 

bạn sẽ được tìm kiếm một lý do của hành vi kỳ lạ của ứng dụng của bạn trong một thời gian dài.

+0

Ok, cảm ơn rất nhiều. Đó chính xác là những gì tôi đang tìm kiếm! – alchemication

4

Thực tiễn tốt là viết câu if. Hãy xem xét mã này:

if (10 == $var) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

Nếu bạn quên một dấu bằng:

if (10 = $var) { } 

Sau đó PHP sẽ tạo ra lỗi phân tích cú pháp, vì vậy bạn biết bạn bỏ lỡ một = và bạn có thể sửa chữa nó. Nhưng mã này:

if ($var = 10) { } 

sẽ chỉ định 10 đến $var và luôn luôn đánh giá đúng điều kiện. Dù nội dung của $var, mã ở trên sẽ luôn luôn lặp lại 'true' và rất khó để tìm lỗi này.

+0

Vâng, có ý nghĩa, tôi nghĩ rằng Eclipse sử dụng để làm nổi bật một "=" trong báo cáo nếu là lỗi cho tôi nhưng Net Đậu không ... vì vậy có thể hữu ích như là một thực hành tốt, Cảm ơn! – alchemication

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