PHP 5.3에서는 참조로 반환 값을 deprecated으로 지정했습니다. 따라서PHP 5.3 및 참조로 new의 반환 값을 할당
$obj =& new Foo();
은 이제 E_DEPRECATED
오류를 발생시킵니다.
레거시 코드가 많은 대형 응용 프로그램을 5.3으로 업그레이드하면 원치 않는 고지가 많이 생깁니다.
이 문제의 잠재적 인 해결책으로 정규 표현식을 사용하여 =& new
의 모든 인스턴스를 찾고 = new
으로 대체하는 것이 좋습니다. 예를 들어, 다음은 모든 PHP 파일을 찾아 =& new
의 모든 인스턴스 쓸어됩니다
find ./ -name '*.php' | xargs perl -p -i -e 's/=(\s*)&(\s*)?new\b/= new/g'
다음과 같은 질문에 대한 답을 찾는 상대 :
- 는 그냥 잘 작동을? 어떤 잠재적 인 문제가 발생할 수 있습니까?
- 그렇지 않은 경우 코드 예로 을
= new
으로 바꾸면 PHP 5.3에서 동작이 변경됩니다. - 이 경우 널리 사용되는 라이브러리의 예는 문제를 일으키는 것으로 알려져 있습니다.
- 방대한 양의
=& new
을 수정하는 데 다른 어떤 아이디어를 권하고 싶습니까?
이것이 정상적으로 작동하지만 문제가 될 수있는 가장자리의 경우를 찾고 있습니다. 예, 오류보고 설정을 변경할 수 있음을 알고 있습니다. 그러나 나는 그 고지들을 숨기고 싶지 않다. 나는 고쳐주고 싶다.
E_DEPRECATED는 오류가 아닌 통지 클래스에 속합니다. 나는 그것을 고치려고 서두를 필요가 있는지 확신하지 못한다. (magic_quotes는 PHP 4.2에서 deprecated로 선언되었거나 그렇게 선언되었다.) 정규 표현식에 관해서는 :'new' 다음에'\ b'를 추가해야합니다. 그렇지 않으면 실행 가능한 재 작성 접근법입니다. 그러나 예상되는 처리 논리를 손상시키는 경우에만 테스트 할 수 있습니다 (거의 없습니다). – mario
@mario E_DEPRECATED는 단지 오류입니다 * 수준 *. 어느 쪽이든 그것을 참조하는 것이 적절할 것입니다. \ b와 좋은 점. – mfonda