이중 not 연산자는 PHP에서 무엇을합니까?
예를 들면 다음과 같습니다.
return !! $row;
위의 코드는 무엇을합니까?
답변
“이중 연산자가 아님”이 아니라 연산자가 두 번 적용 되지 않습니다 . 오른쪽 !
은 피연산자에 관계없이 부울이 됩니다. 그런 다음 왼쪽 !
은 부울을 무효화합니다.
즉, 실제 값 (0이 아닌 숫자, 비어 있지 않은 문자열 및 배열 등의 숫자)의 경우 부울 값을 얻고 TRUE
잘못된 값 (0, 0.0 NULL
,, 빈 문자열 또는 빈 배열)의 경우 부울 값 FALSE
.
다음과 같은 캐스트와 기능적으로 같습니다 boolean
.
return (bool)$row;
답변
bool로 캐스팅하는 것과 동일합니다 (또는 거의 동일합니다-코너 케이스가있을 수 있습니다). 경우 $row
겠습니까 true로 캐스트, 다음 !! $row
도 마찬가지입니다.
그러나 당신이 달성하기를 원한다면 (bool) $row
, 아마도 “흥미로운”표현이 아닌 그냥 그저 사용해야 할 것입니다.)
답변
이 경우 의미 $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
답변
“not not”은 표현의 결과에 언어가 어떤 진실의 가치를 부여하는지 이해하기위한 많은 언어에서 편리한 방법입니다. 예를 들어, 파이썬에서 :
>>> not not []
False
>>> not not [False]
True
복잡한 값을 “값이 있습니까?”와 같은 수준으로 낮추려는 경우에 편리 할 수 있습니다.
답변
더 인간적인, 아마도 더 간단한, 읽을 수없는 방법 :
-
첫번째 ‘!’ 값을 부울로 ‘변환’한 다음 반대의 결과를 출력합니다. 따라서 값이 ‘거짓’인 경우 true를 제공합니다.
-
두번째 ‘!’ 첫 번째의 반대를 출력하는 것입니다.
따라서 기본적으로 입력 값은 문자열 일 수 있지만 부울 출력을 원하므로 첫 번째 ‘!’를 사용하십시오. 이 시점에서 입력 값이 ‘falsy’일 때 TRUE를 원하면 여기서 멈추고 단일 ‘!’을 사용하십시오. 그렇지 않으면 입력 값이 ‘truthy’일 때 TRUE를 원하면 다른 ‘!’를 추가하십시오.
답변
보자
!$a;
해석하기보다는! 복용으로 연산자
오른쪽 값의 반대 부울
읽다
표현식의 반대 부울 을 오른쪽으로 가져갑니다.
이 경우
$a;
표현이 될 수있다
그래서
!$a;
너무
!!$a;
과
!!!$a;
등등, 이것들은 각각 유효한 표현이므로! 연산자는 그들 각각 앞에 붙일 수 있습니다.