나는 7.1.0이 문맥에서 "빈 문자열 할당"의 의미는 무엇입니까?
내가 전역 범위 오프셋 패드의 부족에 쓰기 [1]
나는이경고 [PHP 매뉴얼의 문자열 부분]에서 혼란 텍스트 다음 올 PHP를 사용하고 있습니다 공백을 포함한 캐릭터 라인 정수가 아닌 형식은 정수로 변환됩니다. 잘못된 오프셋 유형은 E_NOTICE을 내 보냅니다. 지정된 문자열의 첫 번째 문자 만 사용됩니다. PHP 7.1.0의 으로 빈 문자열을 할당하면 심각한 오류가 발생합니다. 이전에는 NULL 바이트가 할당되었습니다.
위의 텍스트에서 조항의 의미를 이해하기 위해 열심히 노력 "할당 된 문자열의 첫 번째 문자가 사용됩니다."
및
는 "PHP 7.1.0로, 빈 문자열을 지정하는 것은 치명적인 오류가 발생합니다. 을 이전, 그것은 NULL 바이트를 할당."
위의 두 문장 중 첫 번째 문장을 전혀 이해하지 못합니다.
두 번째 문장의 경우 실제 코드를 통해 이해하려고 노력했습니다. 그래서, 그것을 위해 다음 코드를 썼지 만,이 코드가 매뉴얼의 진술이 말하고자하는 것을 증명하는지 확신 할 수 없습니다. 다음은 제 코드입니다. 그것으로부터, 문장을 정확하게 이해하고 코드를 올바르게 작성했는지 또는 PHP 매뉴얼에서 문장의 의미를 설명 하는지를 알려주십시오. 내가 잘못하고있다면, PHP 매뉴얼의 내용을 준수하도록 코드를 수정하십시오.
코드 조각 : PHP 7.1.0에서
<?php
$rootbeer = 'A & W';
$rootbeer[] = 'N';
?>
출력 : PHP 5.6.30에서
Fatal error: Uncaught Error: [] operator not supported for strings in hello.php:3 Stack trace: #0 {main} thrown in hello.php on line 3
출력 :
Fatal error: [] operator not supported for strings in hello.php on line 3
위의 두 출력에서 어디에도 보이지 않습니다. PHP 5.6.30 그 NULL 바이트이 무언가에 할당되고 있습니다. 두 버전 모두에서 거의 동일한 출력, 동일한 오류가 발생합니다.
출력의 차이를 PHP 7.1.0 및 PHP 5.6.30으로 보여주십시오. 차이점을 이해하는 것이 더 나을 것입니다.
이 사실을 알고 있습니다. > "PHP 7.1.0에서 빈 문자열을 할당하면 치명적인 오류가 발생하지만 코드에서 경고를내는 것뿐입니다. 코드에서 치명적인 오류가 발생했음을 보여주지 못합니다. – user2839497
그것은 정말로 수수께끼입니다. [PHP 인터프리터] (https://github.com/php/php-src/)의 소스를 살펴본 결과이 경고는 실제로 버전 7.1에서 소개되었습니다. 구현에 동의하지 않는 것입니까? 올바른 버전에서 동작 변경이 일어난 것은 이상한 우연한 결과입니다. – jsfan
감사의 말씀 감사드립니다. "PHP 7.1 이상 .0, 빈 인덱스 연산자를 문자열에 적용하면 치명적인 오류가 발생합니다. 이전에 문자열이 자동으로 배열로 변환되었습니다. "적절한 대구 표를 예로 들자면 다시 한 번 감사드립니다. 회신을 기다리고 있습니다 – user2839497