이중 not 연산자는 PHP에서 무엇을합니까?
예를 들면 다음과 같습니다.
return !! $row;
위의 코드는 무엇을합니까?
이중 not 연산자는 PHP에서 무엇을합니까?
예를 들면 다음과 같습니다.
return !! $row;
위의 코드는 무엇을합니까?
답변:
"이중 연산자가 아님"이 아니라 연산자가 두 번 적용 되지 않습니다 . 오른쪽 !
은 피연산자에 관계없이 부울이 됩니다. 그런 다음 왼쪽 !
은 부울을 무효화합니다.
즉, 실제 값 (0이 아닌 숫자, 비어 있지 않은 문자열 및 배열 등의 숫자)의 경우 부울 값을 얻고 TRUE
잘못된 값 (0, 0.0 NULL
,, 빈 문자열 또는 빈 배열)의 경우 부울 값 FALSE
.
다음과 같은 캐스트와 기능적으로 같습니다 boolean
.
return (bool)$row;
!!
동등한 것으로 간주합니까 (bool)
? 또는 어떤 머신 코드가 사용되는지에 따라 다른 머신 코드가 실행됩니까?
!value
경우와 같은 연산이되지 않으며 짝수 (0)의 빅뱅이있는 경우와 같습니다 (bool) value
.
bool로 캐스팅하는 것과 동일합니다 (또는 거의 동일합니다-코너 케이스가있을 수 있습니다). 경우 $row
겠습니까 true로 캐스트, 다음 !! $row
도 마찬가지입니다.
그러나 당신이 달성하기를 원한다면 (bool) $row
, 아마도 "흥미로운"표현이 아닌 그냥 그저 사용해야 할 것입니다.)
!!
은 C (++) 프로그래밍에서 남은 습관입니다. C에서는 캐스트를하는 것이 PHP만큼 쉽지는 않습니다. 많은 문제를 겪고 경고를 컴파일 할 수 있습니다 !!
.
operator!
과부하가 걸리기 때문에 사용하면 C++
위험합니다. 또한 C로 구조체를 캐스트하거나 !
함께 사용할 수 없습니다 . 또한 무언가를 부정 할 수 있다면 int를 반환하는 함수에서 반환 할 가능성이 큽니다. 이는 거의 부울입니다. 당신은 C에 대해 이야기하고 있습니까?
!!
당신이 주장한 것처럼 "흥미로운"것은 아닙니다. C에서 JavaScript까지 모든 곳에서 사용됩니다.
이 경우 의미 $row
갖는다 truthy의 값을, 그 반환 true
그렇지 false
부울 값으로 변환.
다음은 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
더 인간적인, 아마도 더 간단한, 읽을 수없는 방법 :
첫번째 '!' 값을 부울로 '변환'한 다음 반대의 결과를 출력합니다. 따라서 값이 '거짓'인 경우 true를 제공합니다.
두번째 '!' 첫 번째의 반대를 출력하는 것입니다.
따라서 기본적으로 입력 값은 문자열 일 수 있지만 부울 출력을 원하므로 첫 번째 '!'를 사용하십시오. 이 시점에서 입력 값이 'falsy'일 때 TRUE를 원하면 여기서 멈추고 단일 '!'을 사용하십시오. 그렇지 않으면 입력 값이 'truthy'일 때 TRUE를 원하면 다른 '!'를 추가하십시오.
return (bool) $row;