programing

1234 == '1234 검정'이 참으로 평가되는 이유는 무엇입니까?

sourcetip 2022. 10. 29. 16:50
반응형

1234 == '1234 검정'이 참으로 평가되는 이유는 무엇입니까?

중복 가능성:
php == 대 === 연산자

내가 확신하는 사람에게는 쉬운 대답이다.이 표현이 왜 사실로 평가되는지 누가 설명해 줄 수 있나요?

(1234 == '1234 test')

==(유사성) 연산자를 사용하고 있고 PHP가 문자열을 int로 강제하고 있기 때문입니다.

이 문제를 해결하려면 === (필수) 연산자를 사용합니다. 이 연산자는 값이 동일한지 여부뿐만 아니라 데이터 유형이 동일한지 검사하므로 "123" 문자열과 123 int는 동일하다고 간주되지 않습니다.

PHP(및 JavaScript - 동작이 약간 다른 경우)에서 비교 연산자는==는 C나 Java와 같은 강력한 유형의 언어에서와는 다르게 동작합니다.===연산자는 가장 예상할 수 있는 동작을 합니다.아래는 PHP에 적용되는 두 비교 연산자의 내역입니다.

==

이 연산자는 공식적으로 "equality" 연산자로 알려져 있지만, "equality"라는 단어의 일반적인 정의에 실제로 부합하지는 않습니다.이것은 타이핑 비교라고 불리는 것을 실행합니다.양쪽 오퍼랜드의 타입이 일치하지 않는 경우(이 예에서는,1234정수였고1234 test스트링이었습니다).PHP는 오퍼랜드를 암묵적으로 서로의 타입에 캐스트하여 다음과 같이 새로 입력된 값의 동일성을 테스트합니다.

<?php
var_dump( (int) 'hi' ); // int(0)
var_dump( (string) 0 ); //string("0")
var_dump( 'hi' ==  0 ); // bool(true)

var_dump( (int) '1hi' ); // int(1)
var_dump( 1 == '1hi' ); // bool(true)

여기에는 상대(타입 밀림) 불평등 연산자가 있습니다.!=.

===

===연산자로 알려진 연산자는 두 오퍼랜드의 값과 유형을 엄격하게 검사하고 암묵적인 캐스트를 수행하지 않습니다.그러므로,"0"하지 않다=== 0그리고."1234 test"하지 않다=== 1234.

<?php
var_dump( '1234 test' === 1234 ); // bool(false)

상대(엄격한) 부등식 연산자를 가지고 있다.!==.

별난 일람

주의:===연산자는 일부에서는 이상하게 생각되는 개체에 대한 동작을 가집니다.예를 들어 다음과 같습니다.class A및 변수$a그리고.$b다음과 같이 정의됩니다.

<?php
class A { 
  public $property = 'default value';
}
$a = new A();
$b = new A();

예상할 수 있다var_dump($a === $b);출력하다bool(true). 실제로는 false로 반환됩니다.오브젝트에서 사용하는 경우 오퍼레이터는 실제로 두 오퍼랜드가 동일한 오브젝트에 대한 참조인지 여부를 확인합니다.==이 경우 연산자는 오브젝트의 속성을 체크함으로써 동작합니다.$a == $b.

PHP 매뉴얼 링크

문자열을 정수로 지정할 경우 첫 번째 숫자가 아닌 문자까지 숫자가 됩니다.따라서'1234 test' becomes가 되다1234공백이 숫자가 아니기 때문입니다.

★★★★★★★★★★★★★★★★★▼1234 == '1234 test'

문자열을 강제로 비교하려면 문자열에 캐스팅해야 합니다.

''.(1234) == '1234 test' // implicit
(string) 1234 == '1234 test' // explicit
strval(1234) == '1234 test' // procedural

두 가지 데이터 유형(정수와 문자열)을 대략적으로 비교하고 있습니다.PHP에는 느슨한 비교 바이너리 연산자(==)를 사용할 때 시스템에서 비교가 작동하는 방법에 대한 매우 자세한 차트가 있습니다.

http://php.net/manual/en/types.comparisons.php

두 유형이 모두 정수 또는 두 문자열인 경우 유형도 동기화되도록 하려면 강력한 유형 비교 연산자(===)를 사용하십시오.

이 연산자를 사용하면 false도 반환된다는 점에 유의하십시오.

1234 === '1234'

비교할 때 유형을 잘 모를 경우 강력한 유형 비교를 PHP 유형 캐스팅과 결합할 수 있습니다.

$a = 1234;
$b = '1234';

if ($a === $b) { }            // Will not fire, as it is false
if ((int)$a === (int)$b) { }  // Will fire, as it is true

이중 등호는 문자열에서 int를 구문 분석하도록 php에 지시합니다.문자열은 정수 1234로 평가됩니다.트리플 = '==='를 사용하여 정확하게 비교합니다.

숫자를 문자열과 비교하거나 숫자 문자열을 포함하는 경우 각 문자열이 숫자로 변환되고 비교가 숫자로 수행됩니다.

var_dump(0 == "a"); // 0 == 0 -> true

언급URL : https://stackoverflow.com/questions/12151997/why-does-1234-1234-test-evaluate-to-true

반응형