php pass 1... 1이 10.1로 평가되는 이유는 무엇입니까?




php var function (4)

이 질문에는 이미 답변이 있습니다.

나는 3v4l에서 약간의 PHP 스 니펫에 직면했다 : https://3v4l.org/jmrZB

echo 1...1; //10.1

그리고 나는 그 결과를 어떻게 설명 할 지 모르겠다. 왜 이것이 유효한 것으로 간주되는 것입니까?


점 ( . )은 PHP에서 두 가지 역할을합니다.

  1. 10 진수로, 실수 일 때 (예 : 1.1 . 정수 부분과 소수 부분은 실수로 선택 사항 이지만 같은 시간 에는 선택 사항이 아닙니다 . 즉, 1..1 은 모두 PHP에서 유효한 실수입니다 . 숫자가 아닙니다.
  2. 문자열 연결 연산자로 사용 됩니다. 이 연산자는 두 개의 문자열 하위 표현식을 더 큰 표현식으로 연결합니다. 더 큰 표현식의 값은 하위 표현식의 문자열 값을 연결 한 것입니다. 문자열이 아닌 하위 식은 연결되기 전에 문자열로 변환됩니다.
    예 : 1 . 1 1 . 1'1' . '1' '1' . '1' 이고 값은 문자열 '11' 입니다.

1...11. . .1 로 구문 분석됩니다 1. . .1 1. . .1 . 위에서 말한 것에 따르면 1..1 은 실수 ( 1.00.1 )이고 중간 점 ( . )은 문자열 연결 연산자입니다.

숫자를 문자열로 변환 할 때 PHP는이 작업에 필요한 최소 문자 수를 사용합니다. 실수에 정수 부분 만있는 경우 소수점 및 소수점이없는 숫자를 정수로 나타냅니다.

이것이 1. . .1 이유 1. . .1 1. . .1'1' . '0.1' '1' . '0.1' 이고 표현식의 최종 값은 10.1 입니다.

1...1 이이 방법으로 분석됩니까?

구문 분석기는 표현식을 왼쪽에서 오른쪽으로 읽습니다. 1 은 거기에서 시작되는 번호를 알려줍니다. 1. 유효한 실수이지만 1.. 은 아닙니다. 1. 을 숫자로 유지하고 다음 도트는 연결 연산자입니다. 다음 . , 숫자가 뒤 따르는 것은 다른 실수 ( .1 )의 시작입니다.

전체적으로, 1...11...1 과 같습니다 1. . .1 1. . .1 .


중괄호를 적용하면 명확 해집니다.

(1.) . (.1)

  • 1.1. 로 해석됩니다.
  • . 문자열 연결
  • .1.1 로 해석됩니다.

이 모든 문자열에 넣은 문자열은 10.1 입니다.

var_dump(1...1)string(4) "10.1"


다른 운영.

1. <?php echo 1.1; ?> // gives simple 1.1
2. <?php echo 1...1; ?> // gives 10.1
3. <?php echo 1..'1'; ?> // gives 11
4. <?php var_dump(1.); ?> // gives 1
5. <?php var_dump(.1); ?> // gives 0.1

자, 우리의 이상한 수술

echo 1...1 

4 번과 5 번 연결로 처리하여 10.1


왜냐하면 그것은 1. 해석 되었기 때문 . .1 ( 10.1 ) 따라서 10.1 을 얻습니다.







ellipsis