Co robi operator double not w PHP?
Na przykład:
return !! $row;
Co zrobiłby powyższy kod?
Co robi operator double not w PHP?
Na przykład:
return !! $row;
Co zrobiłby powyższy kod?
Odpowiedzi:
To nie jest „double not operator”, to nie operator zastosowany dwukrotnie. Prawo !
spowoduje wynik logiczny, niezależnie od operandu . Wtedy lewica !
zaprzeczy, że to boolean.
Oznacza to, że dla każdej wartości prawdziwej (liczby inne niż zero, niepuste ciągi i tablice itp.) Otrzymasz wartość boolowską TRUE
, a dla każdej wartości fałszywej (0, 0,0 NULL
, puste ciągi lub puste tablice) otrzymasz wartość logiczna FALSE
.
Jest funkcjonalnie równoważny obsadzie do boolean
:
return (bool)$row;
!!
równe (bool)
? Czy może będzie uruchamiany inny kod maszynowy w zależności od tego, który jest używany?
!value
, a jeśli jest parzysta liczba grzywek, będzie taka sama jak (bool) value
.
Jest to to samo (lub prawie takie samo - może być trochę rogu) jak casting na bool. Jeśli $row
miałoby to dotyczyć prawdy, !! $row
to również jest prawdą.
Ale jeśli chcesz to osiągnąć (bool) $row
, prawdopodobnie powinieneś użyć właśnie tego - a nie niektórych „interesujących” wyrażeń;)
!!
jest nawykiem pozostałym po programowaniu w C (++). W C robienie obsady nie jest tak łatwe, jak w PHP, możesz mieć wiele różnych problemów, kompilować ostrzeżenia, tak więc ludzie rzucają się na boll za pomocą !!
.
operator!
jest przeciążalny, użycie go C++
byłoby niebezpieczne. Nie możesz też rzucać struktur w C ani używać !
ich razem. Również jeśli coś można zanegować, najprawdopodobniej jesteś w stanie zwrócić to z funkcji zwracającej int, co w zasadzie sprawia, że jest to wartość logiczna. Czy na pewno mówisz o C?
!!
nie jest niczym „interesującym”, jak twierdziłeś. Wszędzie jest od C do JavaScript.
Oznacza to, że jeśli $row
ma prawdziwą wartość, wróci true
, w przeciwnym razie false
przekształci się w wartość logiczną.
Oto przykładowe wyrażenia do konwersji boolean z dokumentów 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
„nie nie” jest wygodnym sposobem w wielu językach dla zrozumienia, jaką wartość prawdy przypisuje językowi wynik dowolnego wyrażenia. Na przykład w Pythonie :
>>> not not []
False
>>> not not [False]
True
Może to być wygodne w miejscach, w których chcesz zredukować złożoną wartość do czegoś takiego jak „czy w ogóle jest jakaś wartość?”.
Kolejny bardziej ludzki, może prostszy sposób „odczytania” nie:
Pierwszy '!' robi 2 rzeczy: „przekształca” wartość na wartość logiczną, a następnie wypisuje jej przeciwieństwo. To da prawdę, jeśli wartość będzie „fałszywa”.
Drugi '!' jest po prostu odwrotnością pierwszego.
Zasadniczo wartość wejściowa może być dowolna, może być łańcuchem, ale chcesz otrzymać wynik logiczny, więc użyj pierwszego „!”. W tym momencie, jeśli chcesz PRAWDA, gdy wartością wejściową jest „fałsz”, zatrzymaj się tutaj i po prostu użyj pojedynczego „!”; w przeciwnym razie, jeśli chcesz PRAWDA, gdy wartość wejściowa jest „prawda”, dodaj kolejne „!”.
Spójrzmy na
!$a;
Zamiast interpretować! operator jako przyjmujący
Wartość logiczna przeciwna do wartości po prawej stronie
czytać
ustaw wartość logiczną przeciwną do wyrażenia po prawej stronie
W tym przypadku
$a;
może być wyrazem
tak jest
!$a;
więc jest
!!$a;
i
!!!$a;
i tak dalej, ponieważ każde z nich jest prawidłowym wyrażeniem! operator może być dołączony do każdego z nich.
return (bool) $row;