Toán tử kép không làm gì trong PHP?
Ví dụ:
return !! $row;
Các mã ở trên sẽ làm gì?
Toán tử kép không làm gì trong PHP?
Ví dụ:
return !! $row;
Các mã ở trên sẽ làm gì?
Câu trả lời:
Đó không phải là "nhân đôi không phải toán tử", đó không phải là toán tử được áp dụng hai lần. Quyền !
sẽ dẫn đến một boolean, bất kể toán hạng . Sau đó, bên trái !
sẽ phủ nhận boolean đó.
Điều này có nghĩa là với bất kỳ giá trị thực nào (các số khác 0, các chuỗi và mảng không trống, v.v.), bạn sẽ nhận được giá trị boolean TRUE
và với bất kỳ giá trị sai nào (0, 0,0, NULL
chuỗi rỗng hoặc mảng trống) bạn sẽ nhận được giá trị boolean FALSE
.
Nó có chức năng tương đương với một diễn viên để boolean
:
return (bool)$row;
!!
bằng (bool)
trong trường hợp này? Hoặc mã máy khác nhau sẽ được chạy tùy thuộc vào cái nào được sử dụng?
!value
và nếu có một số tiếng nổ chẵn thì nó sẽ giống như (bool) value
.
Nó giống nhau (hoặc gần giống nhau - có thể có một số trường hợp góc) khi truyền sang bool. Nếu $row
sẽ đúc thành đúng, thì !! $row
cũng đúng.
Nhưng nếu bạn muốn đạt được (bool) $row
, có lẽ bạn chỉ nên sử dụng điều đó - chứ không phải một số biểu thức "thú vị";)
!!
là một thói quen còn lại từ lập trình trong C (++). Trong C, việc tạo diễn viên không dễ dàng như trong PHP, bạn có thể gặp nhiều vấn đề khác nhau, biên dịch các cảnh báo, vì vậy mọi người sẽ sử dụng boll bằng cách sử dụng !!
.
operator!
quá tải, sử dụng nó C++
sẽ rất nguy hiểm. Ngoài ra, bạn không thể sử dụng cấu trúc trong C hoặc sử dụng !
với chúng. Ngoài ra nếu một cái gì đó có thể bị phủ định, rất có thể bạn có thể trả lại nó từ một hàm trả về int, điều này khá nhiều làm cho nó trở thành một boolean. Bạn có chắc là bạn đang nói về C?
!!
không có gì "thú vị" như bạn tuyên bố. Nó ở khắp mọi nơi từ C đến JavaScript.
Nó có nghĩa là nếu $row
có một truthy giá trị, nó sẽ trở lại true
, nếu không false
, chuyển đổi một giá trị boolean.
Dưới đây là các biểu thức ví dụ để chuyển đổi boolean từ các tài liệu php.
Expression Boolean
$x = ""; FALSE
$x = null; FALSE
var $x; FALSE
$x is undefined FALSE
$x = array(); FALSE
$x = array('a', 'b'); TRUE
$x = false; FALSE
$x = true; TRUE
$x = 1; TRUE
$x = 42; TRUE
$x = 0; FALSE
$x = -1; TRUE
$x = "1"; TRUE
$x = "0"; FALSE
$x = "-1"; TRUE
$x = "php"; TRUE
$x = "true"; TRUE
$x = "false"; TRUE
"không phải không" là một cách thuận tiện trong nhiều ngôn ngữ để hiểu giá trị thật mà ngôn ngữ gán cho kết quả của bất kỳ biểu thức nào. Ví dụ: trong Python :
>>> not not []
False
>>> not not [False]
True
Nó có thể thuận tiện ở những nơi bạn muốn giảm một giá trị phức tạp xuống thành một cái gì đó như "có giá trị nào không?".
Một cách khác, có thể đơn giản hơn, cách 'đọc' không phải là:
Đầu tiên '!' thực hiện 2 điều: 'chuyển đổi' giá trị thành boolean, sau đó xuất ngược lại. Vì vậy, nó sẽ cho sự thật nếu giá trị là một 'giả'.
Thư hai '!' chỉ là để đầu ra ngược lại với đầu tiên.
Vì vậy, về cơ bản, giá trị đầu vào có thể là bất cứ thứ gì, có thể là một chuỗi, nhưng bạn muốn có đầu ra boolean, vì vậy hãy sử dụng '!' Đầu tiên. Tại thời điểm này, nếu bạn muốn TRUE khi giá trị đầu vào là 'giả mạo', thì hãy dừng ở đây và chỉ sử dụng một '!'; mặt khác, nếu bạn muốn TRUE khi giá trị đầu vào là 'trung thực', sau đó thêm một '!'.
Chúng ta hãy nhìn vào
!$a;
Thay vì diễn giải! toán tử như lấy
Boolean ngược lại với giá trị bên phải của nó
đọc
đưa Boolean đối diện với biểu thức sang phải
Trong trường hợp này
$a;
có thể là một biểu thức
vì vậy là
!$a;
cũng vậy
!!$a;
và
!!!$a;
và như vậy, vì mỗi trong số này là một biểu thức hợp lệ, các! toán tử có thể được chuẩn bị cho mỗi người trong số họ.
return (bool) $row;