답변:
Null
" 아무것도 "를 의미합니다 . var이 초기화되지 않았습니다.
False
" 부울 컨텍스트에서 참이 아님 "을 의미 합니다 . 논리적 문제를 다루고 있음을 명시 적으로 보여주는 데 사용됩니다.
0
입니다 int
. 위의 나머지 부분과는 아무런 관련이 없으며 수학에 사용됩니다.
이제 까다로운 점은 PHP와 같은 동적 언어에서 모두 부울 컨텍스트 (PHP) 의 값을 갖는 것 입니다 False
.
로 ==
테스트하면 부울 값을 테스트하므로 평등을 얻습니다. 로 ===
테스트하면 유형이 테스트되고 불평등이 발생합니다.
글쎄, strrpos()
기능을 보라 . 아무것도 찾지 못하면 False를 반환하지만 문자열의 시작 부분에서 무언가를 발견하면 0을 반환합니다!
<?php
// pitfall :
if (strrpos("Hello World", "Hello")) {
// never exectuted
}
// smart move :
if (strrpos("Hello World", "Hello") !== False) {
// that works !
}
?>
그리고 물론, 당신이 상태를 다루는 경우 :
당신은 차이 확인하려면 DebugMode = False
(OFF로 설정), DebugMode = True
(ON으로 설정) 및 DebugMode = Null
(;-) 하드 디버깅으로 이어질 것입니다 전혀 설정되지 않음).
null
입니다 null
. false
입니다 false
. 슬프지만 사실이야.
PHP에는 일관성이별로 없습니다. 개발자는 TRY 널 수단 "알 수없는"또는 "존재"를 확인합니다. 그러나 종종 False는 '존재하지 않는'역할을합니다 (예 : strrpos ( 'fail', 'search')는 null이 아닌 false를 반환 함)
그들은 이미 무언가에 대해 거짓을 사용하고있을 때 종종 null이 사용되는 것을 볼 수 있습니다. 예 : filter_input (). 변수가 필터에 실패하면 false를 리턴합니다. 변수가 존재하지 않으면 null (존재하지 않음은 필터도 실패했음을 의미하므로 왜 null을 반환합니까?!?)
PHP는 함수에서 데이터를 반환하는 편리함이 있습니다. 종종 개발자들은 데이터 대신 모든 종류의 실패 상태에 빠지게됩니다.
그리고 PHP에서 실패 (false, null)에서 데이터 (int, str 등)를 감지하는 확실한 방법은 없습니다.
함수에 따라 항상 === null 또는 === false를 테스트해야합니다. 또는 filter_input () / filter_var ()와 같은 경우
그리고 저글링 타입의 재미가 있습니다. 배열과 객체도 포함하지 않습니다.
var_dump( 0<0 ); #bool(false)
var_dump( 1<0 ); #bool(false)
var_dump( -1<0 ); #bool(true)
var_dump( false<0 ); #bool(false)
var_dump( null<0 ); #bool(false)
var_dump( ''<0 ); #bool(false)
var_dump( 'a'<0 ); #bool(false)
echo "\n";
var_dump( !0 ); #bool(true)
var_dump( !1 ); #bool(false)
var_dump( !-1 ); #bool(false)
var_dump( !false ); #bool(true)
var_dump( !null ); #bool(true)
var_dump( !'' ); #bool(true)
var_dump( !'a' ); #bool(false)
echo "\n";
var_dump( false == 0 ); #bool(true)
var_dump( false == 1 ); #bool(false)
var_dump( false == -1 ); #bool(false)
var_dump( false == false ); #bool(true)
var_dump( false == null ); #bool(true)
var_dump( false == '' ); #bool(true)
var_dump( false == 'a' ); #bool(false)
echo "\n";
var_dump( null == 0 ); #bool(true)
var_dump( null == 1 ); #bool(false)
var_dump( null == -1 ); #bool(false)
var_dump( null == false ); #bool(true)
var_dump( null == null ); #bool(true)
var_dump( null == '' ); #bool(true)
var_dump( null == 'a' ); #bool(false)
echo "\n";
$a=0; var_dump( empty($a) ); #bool(true)
$a=1; var_dump( empty($a) ); #bool(false)
$a=-1; var_dump( empty($a) ); #bool(false)
$a=false; var_dump( empty($a) ); #bool(true)
$a=null; var_dump( empty($a) ); #bool(true)
$a=''; var_dump( empty($a) ); #bool(true)
$a='a'; var_dump( empty($a)); # bool(false)
echo "\n"; #new block suggested by @thehpi
var_dump( null < -1 ); #bool(true)
var_dump( null < 0 ); #bool(false)
var_dump( null < 1 ); #bool(true)
var_dump( -1 > true ); #bool(false)
var_dump( 0 > true ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( -1 > false ); #bool(true)
var_dump( 0 > false ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( null == 0 );
.
0 == null
하고 null == []
,하지만 [] != 0
!
strrpos('fail', 'search') will return false, and not null
내 의견으로는 정확합니다- null
알 수없는 수단이라면 strrpos
반환 null
하는 것은 '문자열이 없습니다'보다는 '문자열이 있는지 모르겠습니다'라고 말하는 것과 같습니다.
아래는 예입니다.
Comparisons of $x with PHP functions
Expression gettype() empty() is_null() isset() boolean : if($x)
$x = ""; string TRUE FALSE TRUE FALSE
$x = null; NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x is undefined NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = "1"; string FALSE FALSE TRUE TRUE
$x = "0"; string TRUE FALSE TRUE FALSE
$x = "-1"; string FALSE FALSE TRUE TRUE
$x = "php"; string FALSE FALSE TRUE TRUE
$x = "true"; string FALSE FALSE TRUE TRUE
$x = "false"; string FALSE FALSE TRUE TRUE
PHP에서 유형 비교 에 대한 자세한 내용은 이것을 참조하십시오 . 그것은 당신에게 명확한 이해를 제공해야합니다.
PHP에서는 === 및! == 연산자를 사용하여 값이 같은지 여부와 유형이 일치하는지 확인할 수 있습니다. 예를 들어, 그래서는 : 0 == false
이다 true
, 그러나 0 === false
입니다 false
. 동일은 간다 !=
대 !==
. 또한 null
언급 된 연산자를 사용하여 다른 두 개와 비교할 때 비슷한 결과를 기대하십시오.
PHP에서는이 값의 품질이 보통 0
0 이 될 수있는 값을 반환 할 때 사용 되지만 때로는 함수가 실패했을 수도 있습니다. 이러한 경우 PHP로 돌아가서 false
identity 연산자를 사용하여 이러한 경우를 확인해야합니다 ===
. 예를 들어, 다른 문자열 내에서 한 문자열의 위치를 검색하고을 사용하는 strpos()
경우이 함수는 문자열이 맨 처음에 발견되면 문자열 위치를 찾지 못하면 0이 될 수있는 숫자 위치를 반환합니다. 모두 strpos()
반환 false
되면 결과를 처리 할 때이 점을 고려해야합니다.
함수에서 동일한 기술을 사용하면 표준 PHP 라이브러리에 익숙한 사람은 진행 상황과 반환 값이 원하는지 또는 처리하는 동안 오류가 발생했는지 확인하는 방법을 이해합니다. 실제로 함수 매개 변수도 마찬가지입니다. 배열 또는 문자열인지 여부에 따라 다르게 처리 할 수 있으며이 기술은 PHP 전체에서 많이 사용되므로 누구나 쉽게 얻을 수 있습니다. 그래서 나는 그것이 힘이라고 생각합니다.
False, Null, Nothing, 0, Undefined 등
이들 각각은 실제 개념과 관련이있는 특정 의미를 갖습니다. 때때로 여러 의미가 단일 키워드 또는 값으로 과부하됩니다.
에서는 C 및 C ++ , NULL
, False
과 0
동일한 값으로 오버로드된다. C # 에서는 3 가지 고유 한 개념입니다.
null
또는 NULL
일반적으로 가치가 부족함을 나타내지 만 일반적으로 이유를 지정하지 않습니다.
0
는 자연수 0을 나타내며 1, 2, 3 등과 형식이 동일하며 별도의 개념을 지원하는 언어 NULL
에서는 숫자로만 처리해야합니다.
거짓 은 진실이 아님을 나타냅니다. 그리고 이진 값으로 사용 됩니다 . 설정되지 않았거나 의미하지도 않습니다 0
. 단순히 이진 값 중 하나를 나타냅니다.
값이 널과 동일하지만 의도를 나타내는 것을 나타내도록 특별히 설정되지 않았 음을 나타낼 수있는 것은 없습니다.
일부 언어에서는 undefined는 코드에 실제 값을 지정하지 않았으므로 값을 아직 설정하지 않았 음을 나타냅니다.
난 그냥 중 하나 얻으려고 하루에 1/2을 낭비 0
, null
, false
에서 돌아 strops
!
논리가 올바른 방향으로 흐르지 않고 PHP 코딩에 블랙홀이있는 것처럼 보이기 전에 내가하려고했던 모든 것이 있습니다.
개념은 서버에서 호스팅되는 도메인 이름을 사용하고 루트 수준이 아닌지 확인하십시오. 여러 가지 방법이 있지만 다른 PHP 함수 / 구문으로 인해 다른 것을 선택했습니다.
어쨌든 여기는 cosing의 기초였습니다.
if (strpos($_SERVER ['SERVER_NAME'], dirBaseNAME ())
{
do this
} else {
or that
}
{
echo strpos(mydomain.co.uk, mydomain);
if ( strpos(mydomain, xmas) == null )
{
echo "\n1 is null";
}
if ( (strpos(mydomain.co.uk, mydomain)) == 0 )
{
echo "\n2 is 0";
} else {
echo "\n2 Something is WRONG";
}
if ( (mydomain.co.uk, mydomain)) != 0 )
{
echo "\n3 is 0";
} else {
echo "\n3 it is not 0";
}
if ( (mydomain.co.uk, mydomain)) == null )
{
echo "\n4 is null";
} else {
echo "\n4 Something is WRONG";
}
}
이 주제를 읽은 후 마침내 이것이 효과가 있음을 알았습니다 !!!
{
if ((mydomain.co.uk, mydomain)) !== false )
{
echo "\n5 is True";
} else {
echo "\n5 is False";
}
}
이 기사를 보내 주셔서 감사합니다. 이제는 크리스마스이지만 하루 false
가 될 수 있으므로 크리스마스가 아닐 수도 있습니다 NULL
.
간단한 코드를 디버깅하는 데 하루를 낭비한 후에는 문제를 식별하기 위해 문제를 식별 할 수 있었기 때문에 이전에 알고 있었으면 좋겠다고 생각했습니다. 그것은하지 작업으로했던 False
, NULL
그리고 0
모든없는 같은 True or False or NULL
?
로부터 PHP 온라인 설명서 :
명시 적으로 값을 부울로 변환하려면 (bool) 또는 (boolean) 캐스트를 사용하십시오.
그러나 연산자, 함수 또는 제어 구조에 부울 인수가 필요한 경우 값이 자동으로 변환되므로 대부분의 경우 캐스트는 불필요합니다.
부울로 변환 할 때 다음 값은 FALSE로 간주됩니다.
FALSE
자체 0.0
(0) "0"
NULL
(설정되지 않은 변수 포함) TRUE
(모든 리소스 포함) 이 고려됩니다 . 따라서 대부분의 경우 동일합니다.
반면에 ===
와 ==
는 같은 것이 아닙니다. 정기적으로 "같음"연산자 만 있으면됩니다. 명확히하기 위해 :
$a == $b //Equal. TRUE if $a is equal to $b.
$a === $b //Identical. TRUE if $a is equal to $b, and they are of the same type.
자세한 내용 은 PHP 온라인 문서 의 " 비교 연산자 "페이지를 확인하십시오 .
도움이 되었기를 바랍니다.
이러한 값의 차이는 항상 자세한 언어 별 규칙으로 귀결됩니다. PHP, PHP, Perl 또는 C 등에서 PHP에 대해 배우는 것이 반드시 사실은 아닙니다. 작업하는 언어에 대한 규칙을 배우는 것이 가치가 있지만, 너무 많이 의존하면 문제가 발생합니다. . 다음 프로그래머가 코드를 유지해야 할 때 Null과 False에 대한 약간의 세부 사항을 활용하는 구문을 사용했을 때 문제가 발생합니다 (예 :). 코드가 올바르게 표시되어야합니다 (반대로 잘못된 코드도 잘못 표시됨).
Null은 데이터베이스에서 "레코드 없음"또는 "정보 없음"을 나타내는 데 사용됩니다. 따라서 "이 사용자가 우리에게 전자 메일을 보내려고합니까"를 설명하는 비트 필드가있을 수 있습니다. 여기서 True는 그렇습니다. False는 아무 것도 보내지 않으려 고하지만 Null은 알지 그들은 외부 조인 등을 통해 올 수 있습니다.
Null의 논리적 의미는 종종 다릅니다. 일부 언어에서는 NULL이 다른 것과 같지 않으므로 if (a == NULL)은 항상 false입니다.
따라서 개인적으로 나는 항상 부울을 FALSE로 초기화하고 1에서 NULL로 초기화하면 조금 이상하게 보일 것입니다 (C에서도 두 가지가 모두 0 ... 스타일 일뿐입니다).
나쁜 개발자는 거기 코드에서 null / 0 / false의 모든 다른 용도를 찾습니다.
예를 들어, 개발자가하는 가장 일반적인 실수 중 하나는 함수를 사용하여 데이터 형식으로 오류 코드를 반환하는 것입니다.
// On error GetChar returns -1
int GetChar()
이것은 설탕 인터페이스의 예입니다. 이것은 "소프트웨어 개발 프로세스 디버깅"책과 다른 책 "올바른 코드 작성"에서 설명됩니다.
이것의 문제점은 char 유형에 대한 의미 또는 가정입니다. 일부 컴파일러에서 char 유형은 서명되지 않을 수 있습니다. 따라서 -1을 반환하더라도 컴파일러는 대신 1을 반환 할 수 있습니다. C ++ 또는 C에서 이러한 종류의 컴파일러 가정은 파악하기 어렵습니다.
대신 가장 좋은 방법은 오류 코드를 데이터와 혼합하지 않는 것입니다. 따라서 다음 기능을 수행하십시오.
char GetChar()
이제는
// On success return 1
// on failure return 0
bool GetChar(int &char)
이것은 개발자가 개발 상점에서 아무리 어리더라도 결코 잘못하지 않을 것임을 의미합니다. 이것은 코드의 중복성 또는 의존성에 대해 말하는 것이 아닙니다.
그래서 일반적으로 언어에서 첫 번째 클래스 유형으로 bool을 바꾸는 것은 괜찮으며 joel은 최근 포스트 캐스트와 함께 그것에 대해 이야기했다고 생각합니다. 그러나 일상 생활에서 데이터와 믹스 앤 매치 부울을 사용하지 마십시오. 완벽해야합니다.
Null은 아무것도 아니며 False는 비트이며 0은 (아마도) 32 비트입니다.
PHP 전문가는 아니지만 일부 최신 언어에서는 서로 호환되지 않습니다. 나는 0과 false를 갖는 미스 교환이 가능하지만 부울이 실제 유형이면 메소드와 객체를 가질 수 있으므로 트레이드 오프 일뿐입니다. Null은 null이지만 본질적으로 아무것도 없습니다.
거의 모든 현대 언어에서 논리적으로 null 값이 없거나 포인터가 초기화되지 않은 포인터 (또는 참조)를 나타냅니다. 0은 정수 값 0이고, false는 false의 부울 값입니다. 예를 들어 C에서 복잡한 작업을 수행하려면 null, 0 및 false가 모두 동일한 방식으로 표시됩니다. PHP에서 어떻게 작동하는지 모르겠습니다.
더 복잡하게 만들기 위해 데이터베이스에는 null이라는 개념이 있는데, 이는 누락되거나 적용 할 수 없음을 의미하며 대부분의 언어에는 DBNull을 null에 직접 매핑 할 수있는 방법이 없습니다. 예를 들어 최근까지는 int가 null과 0이 구별되지 않았지만 nullable int로 변경되었습니다.
이 소리를 복잡하게해서 죄송합니다. 이것은 몇 년 동안 언어로 해리의 고수 지점이었으며 최근까지도 어느 곳에서도 명확한 해결책을 얻지 못했습니다. 사람들이 함께 물건을 뭉개거나 공백으로 만들거나 0은 데이터베이스에서 null을 나타내므로 항상 잘 작동하지는 않습니다.
False와 0은 개념적으로 유사합니다. 즉, 동형입니다. 0은 자연수의 대수의 초기 값이고, False는 부울 대수의 초기 값입니다.
다시 말해, 0은 자연수에 더하면 같은 숫자를 산출하는 숫자로 정의 될 수 있습니다.
x + 0 = x
마찬가지로 False는 그 값의 분리와 다른 값이 같은 값이되도록하는 값입니다.
x || False = x
널은 개념 상 완전히 다른 것입니다. 언어에 따라 다른 의미론이 있지만 "초기 값"을 False로 0으로 묘사하는 것은 없습니다. 널에 대한 대수는 없습니다. 변수와 관련이 있으며 일반적으로 변수에 현재 컨텍스트에서 특정 값이 없음을 나타냅니다. 대부분의 언어에는 Null에 정의 된 연산이 없으며 Null을 피연산자로 사용하는 것은 오류입니다. 일부 언어에는 "null"이 아닌 "bottom"이라는 특수 값이 있습니다.이 값은 종료되지 않는 계산 값의 자리 표시 자입니다.
누군가 'NULL'이 왜 비교 인스턴스의 문자열이 아닌지 설명해 줄 수 있습니까?
$x = 0;
var_dump($x == 'NULL'); # TRUE !!!WTF!!!
php > var_dump((int) "NULL"); // => int(0)
php > var_dump((int) "BLA"); // => int(0)
php.net/manual/en/language.operators.comparison.php 참조 문자열과 리소스를 숫자로 변환, 일반적인 수학
허위 문제는 PHP 기록에서 비롯됩니다. 문제는 잘 정의되지 않은 스칼라 유형을 대상으로합니다.
'*' == true -> true (string match)
'*' === true -> false (numberic match)
(int)'*' == true -> false
(string)'*' == true -> true
PHP7 엄격함은 한 단계 발전하지만 충분하지 않을 수 있습니다. https://web-techno.net/typing-with-php-7-what-you-shouldnt-do/
null
때false
. 내가 사용하여 선호null
하는 방법에서 값을 검색 할 때 내가 사용할 수 있기 때문에,isset
값을 사용하는 대신 반환 여부를 결정하기empty
: 계정에 걸리지 않을 것이다false
,0
,'0'
또는 빈 문자열이 많은 상황에서 가능한 값이 될 수있다. 나에게 그것은 지저분한 구조의 가장 깨끗한 솔루션입니다.