(원래 그의 질문 에 leepowers 에 의해 게시 됨 )
한 가지 큰 이유로 인해 오류 메시지가 혼동됩니다.
기본 유형 이름은 PHP에서 예약되지 않았습니다
다음은 모두 유효한 클래스 선언입니다.
class string { }
class int { }
class float { }
class double { }
내 실수는 오류 메시지가 문자열 기본 유형만을 참조한다고 생각하고 있었는데 '인스턴스'라는 단어가 일시 중지되어야합니다. 추가 설명을위한 예 :
class string { }
$n = 1234;
$s1 = (string)$n;
$s2 = new string();
$a = array('no', 'yes');
printf("\$s1 - primitive string? %s - string instance? %s\n",
$a[is_string($s1)], $a[is_a($s1, 'string')]);
printf("\$s2 - primitive string? %s - string instance? %s\n",
$a[is_string($s2)], $a[is_a($s2, 'string')]);
산출:
$ s1-기본 문자열? 예-문자열 인스턴스? 아니
$ s2-기본 문자열? 아니오-문자열 인스턴스? 예
PHP에서는 실제로 a 일 때 string
a가 string
예외가 될 수 string
있습니다. 암시 적 유형 변환을 사용하는 모든 언어와 마찬가지로 컨텍스트가 가장 중요합니다.