Hướng dẫn dùng pre face trong PHP

&&giống với "và" và ||giống với "hoặc" trong PHP không?

Nội dung chính

  • Đăng nhập để trả lời câu hỏi
  • Có thể bạn quan tâm
  • Which has higher precedence
  • What is Order of precedence in PHP?
  • What is the difference between C and PHP assignment incrementing?
  • What is the precedence of string concatenation?

Tôi đã thực hiện một vài thử nghiệm và có vẻ như chúng hoạt động giống nhau. Có sự khác biệt nào không?

Nếu không, có bất kỳ dấu hiệu PHP nào khác có từ tương đương không và bạn có nghĩ rằng nó làm cho mã dễ đọc hơn không?

  • php
  • conditional

22 hữu ích 5 bình luận 11k xem chia sẻ

answer

37

Hướng dẫn dùng pre face trong PHP

andorcó mức độ ưu tiên thấp hơn so với &&||. Chính xác hơn &&||có mức độ ưu tiên cao hơn toán tử gán ( =) while andorcó thấp hơn.

http://www.php.net/manual/en/language.operators.precedence.php

Thông thường nó không tạo ra sự khác biệt, nhưng có những trường hợp khi không biết về sự khác biệt này có thể gây ra một số hành vi không mong muốn. Xem các ví dụ ở đây:

http://php.net/manual/en/language.operators.logical.php

37 hữu ích 4 bình luận chia sẻ

answer

7

Vâng, chúng giống nhau về mặt logic. (Tôi tin rằng "&&" và "||" là lựa chọn ưu tiên trong các tiêu chuẩn mã hóa Zend , nhưng tôi không thể tìm thấy bất kỳ thông tin cụ thể nào về điều này, vì vậy tất cả có thể chỉ là một giấc mơ. Hoặc một cái gì đó.)

Mà nói:

  1. "&&" và "||" có mức độ ưu tiên cao hơn "VÀ" và "HOẶC" (dường như không bao giờ có liên quan, nhưng bạn không bao giờ biết).

  2. Rất nhiều ngôn ngữ khác sử dụng "&&" và "||", thay vì các từ tương đương trong văn bản, vì vậy có thể là một ý tưởng để đi với điều này.

  3. Miễn là bạn sử dụng tập hợp toán tử đã chọn của mình một cách nhất quán thì điều đó không thực sự quan trọng.

7 hữu ích 1 bình luận chia sẻ

answer

5

Điều làm tôi khó chịu là:

echo (false and false ? true : true);
// (empty/false)

Bạn có thể đoán chỉ có kết quả khả thi là "1" (đúng) vì không có trường hợp nào có thể xuất ra sai ... ... nhưng nó sẽ là "" (sai).

Việc sử dụng && làm toán tử trong trường hợp này thỏa mãn ít nhất những mong đợi của tôi:

echo (false && false ? true : true);
// 1

Vì vậy, trong một số trường hợp, việc sử dụng có ý nghĩa quan trọng.

5 hữu ích 0 bình luận chia sẻ

answer

4

Sự khác biệt nằm ở mức độ ưu tiên . Nhưng không chỉ so sánh với nhau!

Trong hầu hết các trường hợp, bạn sẽ không bận tâm về điều đó, nhưng có những trường hợp cụ thể khi bạn phải lùi lại một bước và nhìn vào bức tranh toàn cảnh. Lấy ví dụ như sau:

// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;

// The constant true is assigned to $h before the "and" operation occurs
// Acts like: (($h = true) and false)
$h = true and false;

var_dump($g, $h);

Điều này sẽ tạo ra, tương ứng:

bool(false)
bool(true)

Nói cách khác, &&có mức độ ưu tiên cao hơn =, mức độ ưu tiên cao hơn and, như được nêu trong http://php.net/manual/en/language.operators.precedence.php . (Nó được đề cập trong các câu trả lời khác, nhưng tôi nghĩ nó đáng để chi tiết hóa, vì việc sử dụng sai có thể dẫn đến lỗi logic)

Tôi hy vọng nó có thể giúp bạn. Bạn có thể tìm thêm tại http://php.net/manual/en/language.operators.logical.php

4 hữu ích 1 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Which has higher precedence

(In PHP " {" and "}" should also be considered also). However, PHP Manual is not listed " (" and ")" in precedence list. It looks like " (" and ")" has higher precedence as it should be.

What is Order of precedence in PHP?

In that case, the order of associativity (either left or right) decides the order of operations. Operators of same precedence level but are non-associativem cannot be used next to each other. Following table lists PHP operators with decreasing order of precedence

What is the difference between C and PHP assignment incrementing?

It would appear that in php the increment in the left side of the assignment is processed prior to processing the right side of the assignment, whereas in C, neither increment occurs until after the assignment.

What is the precedence of string concatenation?

Relying on the precedence of string concatenation (.) relative to arithmetic addition/subtraction ( + or -) or bitwise shift left/right ( << or >> ), i.e. using them together in an unparenthesized expression, is deprecated.