O que o operador double not faz no PHP?
Por exemplo:
return !! $row;
O que o código acima faria?
O que o operador double not faz no PHP?
Por exemplo:
return !! $row;
O que o código acima faria?
Respostas:
Não é o "operador não duplo", é o operador não aplicado duas vezes. O direito !
resultará em um booleano, independentemente do operando . Então a esquerda !
negará esse valor booleano.
Isso significa que, para qualquer valor verdadeiro (números diferentes de zero, cadeias e matrizes não vazias, etc.), você obterá o valor booleano TRUE
e, para qualquer valor falso (0, 0,0, NULL
cadeias vazias ou matrizes vazias), receberá o valor booleano FALSE
.
É funcionalmente equivalente a um elenco para boolean
:
return (bool)$row;
!!
igual (bool)
neste caso? Ou código de máquina diferente será executado dependendo de qual deles for usado?
!value
, e se houver um número par de estrondos, será o mesmo que (bool) value
.
É o mesmo (ou quase o mesmo - pode haver algum caso de canto) como transmitir para bool. Se $row
converter para verdadeiro, então!! $row
também é verdade.
Mas se você deseja alcançar (bool) $row
, provavelmente deve usar exatamente isso - e não algumas expressões "interessantes";)
!!
é um hábito restante da programação em C (++). Em C, fazer uma conversão não é tão fácil quanto no PHP, você pode obter muitos problemas diferentes, compilar avisos, assim também !!
.
operator!
é sobrecarregável, usá-lo C++
seria perigoso. Além disso, você não pode converter estruturas em C ou usá !
-las. Além disso, se algo puder ser negado, você provavelmente poderá retorná-lo de uma função retornando int, o que o torna um valor booleano. Tem certeza de que está falando sobre C?
!!
não é nada "interessante" como você afirmou. Está em todo lugar, de C a JavaScript.
Isso significa que, se $row
tiver um valor verdadeiro , ele retornará true
, caso contráriofalse
, convertendo para um valor booleano.
Aqui estão exemplos de expressões para conversão booleana de 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
"not not" é uma maneira conveniente em muitas línguas para entender qual valor de verdade a linguagem atribui ao resultado de qualquer expressão. Por exemplo, em Python :
>>> not not []
False
>>> not not [False]
True
Pode ser conveniente em locais onde você deseja reduzir um valor complexo para algo como "existe algum valor?".
Outra maneira mais humana, talvez mais simples, de 'ler' o não:
O primeiro '!' faz 2 coisas: 'converte' o valor em booleano e depois gera o seu oposto. Portanto, será verdadeiro se o valor for "falso".
O segundo '!' é apenas para produzir o oposto do primeiro.
Então, basicamente, o valor de entrada pode ser qualquer coisa, talvez uma string, mas você deseja uma saída booleana, então use o primeiro '!'. Nesse ponto, se você quiser VERDADEIRO quando o valor de entrada for 'falso', pare aqui e use apenas um '!'; caso contrário, se você quiser VERDADEIRO quando o valor de entrada for 'verdade', adicione outro '!'.
Vamos olhar para
!$a;
Em vez de interpretar o! operador como tendo o
Booleano oposto ao valor à sua direita
ler
pegue o oposto booleano da expressão à direita
Nesse caso
$a;
poderia ser uma expressão
assim é
!$a;
assim é
!!$a;
e
!!!$a;
e assim por diante, como cada uma delas é uma expressão válida, o! operador pode ser anexado a cada um deles.
return (bool) $row;