[php] PHP에서 이중 (!!) 연산자

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

등등, 이것들은 각각 유효한 표현이므로! 연산자는 그들 각각 앞에 붙일 수 있습니다.


답변