(PHP có ||
và OR
JS chỉ có ||
..)JS vs PHP: phân công điều hành được ưu tiên khi sử dụng với logic hoặc
JS. Theo MDN||
có mức độ ưu tiên cao hơn =
. Vì vậy, điều này không làm việc:
a || a = 1;
vì nó đánh giá là:
(a || a) = 1;
mà kết quả trong một "phía bên tay trái không hợp lệ trong chuyển nhượng". Tôi hiểu điều đó. Điều đó có ý nghĩa.
PHP. Theo PHP.net, nó hoạt động tương tự cho PHP: ||
trước =
. Tuy nhiên, tôi sử dụng nó mọi lúc:
$a || $a = 1;
Tại sao nó hoạt động trong PHP ?? Và để đầu nó đi: PHP OR
có độ ưu tiên thấp hơn =
, do đó, những không nên làm như vậy:
$a || $a = 1;
$a OR $a = 1;
nhưng họ làm ... https://3v4l.org/UWXMd
Tôi nghĩ rằng JS' ||
công trình theo MDN của và OR
của PHP hoạt động giống như bảng của PHP, nhưng ||
của PHP không hoạt động giống như vậy.
Đây có phải là một quirk PHP kỳ lạ khác không?
Tài liệu hướng dẫn cũng đề cập đến điều này:
Mặc dù
bảng=
có độ ưu tiên thấp hơn hầu hết các nhà khai thác khác, PHP vẫn sẽ cho phép biểu thức tương tự như sau:if (!$a = foo())
, trong trường hợp giá trị trả về củafoo()
được đưa vào$a
.
Các ưu tiên mệnh lệnh PHP nên đánh giá (!$a) = foo()
, mà làm cho không có ý nghĩa và nên thất bại, nhưng PHP đánh giá nó như !($a = foo())
, bởi vì nó rất thích hợp ngoại lệ.
Câu hỏi tiếp theo: Bạn nghĩ gì if ($d = $c && $e = $b && $f = $a)
? https://3v4l.org/3P2hN Tôi không hiểu ... Tôi hiểu trường hợp thứ hai và thứ ba (với and
), không phải điều gì xảy ra trong lần đầu tiên.
Hướng dẫn sử dụng PHP cũng nói là Ưu tiên toán tử và tính liên kết chỉ xác định cách biểu thức được nhóm lại, chúng không chỉ định thứ tự đánh giá. PHP không (trong trường hợp chung) xác định thứ tự một biểu thức được đánh giá và mã giả định một thứ tự đánh giá cụ thể cần tránh, bởi vì hành vi có thể thay đổi giữa các phiên bản của PHP hoặc tùy thuộc vào mã xung quanh. – CY5
@ CY5 Sự khác nhau giữa nhóm và đánh giá là gì? Nhóm làm gì mà không có thứ tự đánh giá? – Rudie
PHP! = JS. Có câu trả lời của bạn. –