2009-06-02 7 views
0

나는 새로운 웹 호스트로 이동 한 우리가 지금까지 사용하고 PHP 5.1 대신 5.2이 있었다. 나는 그것이 PHP 버전 또는 구성 문제인지 아직 알지 못했습니다.암시 적 변환 "개체 ID 번호를 ..."

는 지금 __toString 기능을 가지고있는 대부분의 클래스 (또는 전부) (PHP4에서와 같은) "개체 ID 번호"로 변환하지만 그들은 모두 전에 올바른 값을 반환했습니다.

어떻게 해결할 수 있습니까?

+0

당신은 가지고있는 문제점에 대해 좀 더 명확하게 표현할 수 있습니까? 이전 (5.2로)과 현재 (5.1로) 무슨 일이 벌어 졌는지에 대한 자세한 정보? –

답변

3

PHP 5.2 이전 버전에서는 특정 상황 (예 : echo()print())에서만 __toString 메서드가 "마법처럼"호출되었습니다. 따라서 현재 "__toString()"을 직접 출력 기능 이외의 "마법"방식으로 사용하는 경우 예상대로 작동하지 않습니다.

Source

:

그것은이 직접 echo() 또는 print()와 을 결합 할 때 PHP 5.2.0 전에 __toString 방법 만 호출되었음을 주목할 필요가있다. PHP 5.2.0부터 어떤 문자열 컨텍스트 (예 : printf(), %s 수정 자)에서 호출되지만 컨텍스트에서는 표시되지 않습니다 (예 : %d 수정 자 포함). 문자열 에있어서 __toString없이 객체 변환 PHP 5.2.0 이후 은 E_RECOVERABLE_ERROR을 일으킬 것이다.

+0

일부 출력은 에코를 통해 발생하고 일부는 반환 값으로 인식됩니다. 이제 php5를 업데이트하기 위해 지원 담당자에게 연락했습니다. 감사합니다. – Auras

+0

문제는 없습니다. PHP 5.2가 잘린 상태인지 확인하십시오. –

1

일부 호스트 회사 (예 : 1and1)는 PHP 4.x 및 5.x를 모두 실행하고 기본값은 4.x입니다. 올바른 버전의 PHP를 사용하고 있는지 확인하는 .htaccess 파일이 필요할 수도 있습니다.

또한, 마법 __toString은()에 따라 5.2 이상 버전에서 약간의 차이 인 documentation :

그것은 PHP는 5.2.0 전에 직접 결합 될 때 __toString 메소드 만 호출되었음을 주목할 필요가있다 echo() 또는 print()를 사용하십시오. PHP 5.2.0부터는 % s 한정자가있는 printf()의 모든 문자열 컨텍스트에서 호출되지만 다른 유형의 컨텍스트 (예 : % d 한정자 포함)에서는 호출되지 않습니다. PHP 5.2.0부터 __toString 메서드가없는 객체를 문자열로 변환하면 E_RECOVERABLE_ERROR가 발생합니다.

따라서 출력을 호출하는 방법에 따라 달라질 수 있습니다.