나는 새로운 웹 호스트로 이동 한 우리가 지금까지 사용하고 PHP 5.1 대신 5.2이 있었다. 나는 그것이 PHP 버전 또는 구성 문제인지 아직 알지 못했습니다.암시 적 변환 "개체 ID 번호를 ..."
는 지금 __toString 기능을 가지고있는 대부분의 클래스 (또는 전부) (PHP4에서와 같은) "개체 ID 번호"로 변환하지만 그들은 모두 전에 올바른 값을 반환했습니다.
어떻게 해결할 수 있습니까?
나는 새로운 웹 호스트로 이동 한 우리가 지금까지 사용하고 PHP 5.1 대신 5.2이 있었다. 나는 그것이 PHP 버전 또는 구성 문제인지 아직 알지 못했습니다.암시 적 변환 "개체 ID 번호를 ..."
는 지금 __toString 기능을 가지고있는 대부분의 클래스 (또는 전부) (PHP4에서와 같은) "개체 ID 번호"로 변환하지만 그들은 모두 전에 올바른 값을 반환했습니다.
어떻게 해결할 수 있습니까?
PHP 5.2 이전 버전에서는 특정 상황 (예 : echo()
및 print()
)에서만 __toString
메서드가 "마법처럼"호출되었습니다. 따라서 현재 "__toString()
"을 직접 출력 기능 이외의 "마법"방식으로 사용하는 경우 예상대로 작동하지 않습니다.
그것은이 직접
echo()
또는print()
와 을 결합 할 때 PHP 5.2.0 전에__toString
방법 만 호출되었음을 주목할 필요가있다. PHP 5.2.0부터 어떤 문자열 컨텍스트 (예 :printf()
,%s
수정 자)에서 호출되지만 컨텍스트에서는 표시되지 않습니다 (예 :%d
수정 자 포함). 문자열 에있어서__toString
없이 객체 변환 PHP 5.2.0 이후 은E_RECOVERABLE_ERROR
을 일으킬 것이다.
일부 출력은 에코를 통해 발생하고 일부는 반환 값으로 인식됩니다. 이제 php5를 업데이트하기 위해 지원 담당자에게 연락했습니다. 감사합니다. – Auras
문제는 없습니다. PHP 5.2가 잘린 상태인지 확인하십시오. –
일부 호스트 회사 (예 : 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가 발생합니다.
따라서 출력을 호출하는 방법에 따라 달라질 수 있습니다.
당신은 가지고있는 문제점에 대해 좀 더 명확하게 표현할 수 있습니까? 이전 (5.2로)과 현재 (5.1로) 무슨 일이 벌어 졌는지에 대한 자세한 정보? –