2010-10-25 24 views
9

Tôi thường viết này:PHP: thứ tự của các nhà khai thác trong một sự so sánh vô

if ($myvar == null) 

nhưng đôi khi tôi đọc:

if (null == $myvar) 

Tôi nhớ ai đó nói với tôi sau này là tốt hơn nhưng tôi don' t nhớ tại sao.

Bạn có biết cái nào tốt hơn và tại sao không?

Cảm ơn, Dan

+1

Đây là bản sao của http://stackoverflow.com/questions/271561/why-does-one-often-see-null-variable-instead-of-variable-null-in-c và nhiều người khác – Harmen

Trả lời

11

Nếu bạn vô tình quên một trong những =, điều thứ hai sẽ đưa ra một lỗi.

if ($myvar = null) 

này sẽ gán null để $myvar và thực hiện việc kiểm tra if vào kết quả.

if (null = $myvar) 

này sẽ cố gắng gán giá trị của $myvar để null và đưa ra một lỗi bởi vì bạn không thể gán cho null.

+0

I xem. Điều đó có ý nghĩa. Cảm ơn! – Tom

1

Nó không phải là về thứ tự, nó là về tránh tình cờ bỏ qua một =, mà sẽ dẫn đến nhiệm vụ thay vì so sánh. Khi sử dụng quy ước đầu tiên liên tục, tình cờ bỏ qua sẽ ném một lỗi.

0

Tôi đã nhìn thấy sau này sử dụng để giúp tránh các lỗi lập trình viên như:

if($myvar = null) 

này sẽ luôn luôn trở thành sự thật, trong khi

if(null = $myvar) 

sẽ ném một lỗi.

+0

Không, giá trị đầu tiên sẽ trả về 'null', nó đánh giá thành' false' trong phép chuyển đổi boolean, do đó điều kiện này sẽ không bao giờ chuyển. Vấn đề khác là nó cũng sẽ đặt '$ myvar' thành' null'. – lonesomeday

0

Thay vào đó, bạn có thể sử dụng is_null().

+0

Không phải những gì anh ta hỏi, đây là về thứ tự toán hạng. – fredley

0

Sử dụng toán tử gán = ở vị trí của các nhà điều hành bình đẳng == là một lỗi phổ biến:

if($myvar = null) 

mà thực sự gán null để $myvar. Một cách để nhận được lỗi logic này là sử dụng hằng số trên LHS để nếu bạn sử dụng = thay cho số == bạn sẽ nhận được lỗi dưới dạng hằng số (null trong trường hợp này) không thể được gán giá trị:

1

Điều gì người này có thể đã ám chỉ đến việc tối ưu hóa vi mô về các câu lệnh có điều kiện. Ví dụ, trong điều kiện sau, điều kiện thứ hai sẽ không được đánh giá là điều kiện đầu tiên đã thất bại.

if (1 == 0 && 1 == 1) 

Tuy nhiên, những gì bạn sẽ luôn được đánh giá. Do đó trật tự không quan trọng, và quy ước đã đề cập là cách để đi.

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