Що робить подвійний не оператор у PHP?
Наприклад:
return !! $row;
Що б зробити код вище?
Що робить подвійний не оператор у PHP?
Наприклад:
return !! $row;
Що б зробити код вище?
Відповіді:
Це не "подвійний не оператор", це не оператор, що застосовується двічі. Право !
призведе до булевого значення, незалежно від операнду . Тоді зліва !
відкине цю булеву.
Це означає, що для будь-якого справжнього значення (числа, крім нуля, непусті рядки та масиви тощо) ви отримаєте булеве значення TRUE
, а для будь-якого помилкового значення (0, 0,0 NULL
, порожні рядки або порожні масиви) ви отримаєте булеве значення FALSE
.
Він функціонально еквівалентний амплуа boolean
:
return (bool)$row;
!!
рівним (bool)
у цьому випадку? Або буде запускатися інший машинний код залежно від того, який з них використовується?
!value
, і якщо є парна кількість чуб, то це буде те саме, що (bool) value
.
Це те саме (або майже те саме - може бути якийсь кутовий випадок), як і лиття в bool. Якщо $row
було б приведено до істини, то !! $row
також є правдою.
Але якщо ви хочете досягти (bool) $row
, ви, ймовірно, повинні використовувати саме це - а не якісь "цікаві" вирази;)
!!
- це звичка, що залишається від програмування на C (++). У C ролях робити не так просто, як у PHP, ви можете отримати багато різних проблем, скласти попередження, aso. Таким чином, люди кидають на роботу, використовуючи !!
.
operator!
це C++
може бути завантажено, використовувати його в було б небезпечно. Також ви не можете викидати структури в C або використовувати !
з ними. Крім того, якщо щось можна заперечувати, ви, швидше за все, зможете повернути це з функції, що повертається до int, що в значній мірі робить його булевим. Ви впевнені, що говорите про C?
!!
це нічого "цікавого", як ви цього заявляли. Це повсюдно від C до JavaScript.
Це означає, що якщо $row
має значення truthy , воно повернеться true
, інакше false
перетвориться на булеве значення.
Ось приклади виразів для булевого перетворення з php docs.
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
"не" є зручним способом для багатьох мов зрозуміти, яку істинність мова присвоює результату будь-якого висловлення. Наприклад, у Python :
>>> not not []
False
>>> not not [False]
True
Це може бути зручно в місцях, де ви хочете зменшити складне значення до чогось типу "чи є взагалі значення?".
Ще один людський, можливо, простіший спосіб «прочитати» не так:
Перший '!' робить 2 речі: 'конвертувати' значення в бульне, а потім вивести його протилежне. Таким чином, це буде істинним, якщо значення є "хибним".
Секунда '!' це просто вивести протилежне першому.
Таким чином, в основному вхідним значенням може бути будь-що, можливо, рядок, але ви бажаєте булевого виводу, тому використовуйте перший '!'. У цей момент, якщо ви хочете, щоб ІСТИНА, коли вхідне значення "помилкове", зупиніться тут і просто використовуйте єдине "!"; в іншому випадку, якщо ви хочете TRUE, коли вхідне значення "truthy", тоді додайте інше "!".
Давайте подивимось
!$a;
Замість того, щоб інтерпретувати! оператор як приймає
Булеві протилежні значення праворуч
читати
прийняти булеву протилежність виразу праворуч
В цьому випадку
$a;
може бути виразом
так і є
!$a;
так і є
!!$a;
і
!!!$a;
і так далі, оскільки кожен з них є дійсним виразом,! Оператор може бути попередньо до кожного з них.
return (bool) $row;