이중 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;