DEV WIKI
백엔드 · 오류·증상

Parse error: syntax error, unexpected 'new' (T_NEW) in /tmp/test.php on line 3

PHP 7에서 `new` 문의 결과를 참조로 대입하면 파서 오류가 발생합니다.

빠른 답변

우선 확인할 원인
PHP 7에서는 `new` 문의 결과를 변수에 참조로 대입할 수 없으므로 `$c =& new C;` 구문에서 `Parse error: syntax error, unexpected 'new' (T_NEW)`가 발생합니다.
먼저 확인할 항목
현재 화면 또는 로그의 오류 문자열에 `Parse error: syntax error, unexpected 'new' (T_NEW)`가 포함되는지 확인합니다.
적용 범위
현재 증상과 본문에 적은 관찰 조건이 함께 확인된 경우
출처 확인일
2026-07-30
최종 검토
2026-07-27
수정일
2026-07-27
관련 기술
오류·수정 제보 (새 창에서 열림)

현재 증상

  • 애플리케이션 오류 메시지

먼저 확인할 항목

현재 화면 또는 로그의 오류 문자열에 `Parse error: syntax error, unexpected 'new' (T_NEW)`가 포함되는지 확인합니다.

오류가 발생한 코드에 `new` 문의 결과를 `=&`로 참조 대입하는 구문이 있는지 확인합니다.

오류 문자열과 해당 구문이 모두 확인되면 이 문서의 문제로 식별합니다.

수정 뒤 같은 PHP 버전에서 구문 검사를 실행하거나 같은 요청을 다시 실행해 파서 오류가 사라졌는지 확인합니다.

피해야 할 조치

주의

  • 이 분기는 PHP 7의 `$c =& new C;` 형태에만 적용합니다. 다른 `Parse error`나 다른 PHP 버전 문제에 같은 변경을 적용하지 않습니다.
  • 운영 파일을 바로 바꾸지 말고 현재 파일과 PHP 버전을 기록한 뒤 테스트 가능한 복사본에서 먼저 확인합니다.

환경별 원인과 조치

증상

PHP 7에서 다음과 같이 new 문의 결과를 참조로 대입하면 파서 오류가 발생합니다.

class C {}$c =& new C;

표시되는 오류는 다음과 같습니다.

Parse error: syntax error, unexpected 'new' (T_NEW) in /tmp/test.php on line 3

확인

현재 화면 또는 로그의 오류 문자열에 Parse error: syntax error, unexpected 'new' (T_NEW)가 포함되는지 확인합니다.

오류가 발생한 코드에 $c =& new C;처럼 new 문의 결과 앞에 참조 대입 연산자 =&를 사용한 구문이 있는지 확인합니다.

두 조건이 모두 맞으면 PHP 7의 new 결과 참조 대입 제한에 해당합니다.

다음 조치

현재 파일과 PHP 버전을 기록한 뒤 테스트 가능한 복사본에서 참조 대입 연산자 &를 제거해 일반 대입으로 바꿉니다.

class C {}$c = new C;

같은 PHP 버전에서 구문 검사를 실행하거나 같은 요청을 다시 실행해 unexpected 'new' (T_NEW)가 사라졌는지 확인합니다.

범위

이 제한은 PHP 5.6.x에서 PHP 7.0.x로 마이그레이션할 때의 하위 호환성 변경 사항입니다.

다른 Parse error나 다른 PHP 버전 문제에 이 변경을 그대로 적용하지 마세요.

원인 분포

[Observation] 입력된 3건에서는 원인이 두 유형으로 나타났습니다.

  • 클래스 속성 선언부에서 객체 생성 표현식을 초기값으로 사용한 사례: 1건
  • =& new 또는 & new 형태로 객체 생성 결과를 참조 대입한 사례: 2건

[Observation] 위 분포는 수집된 사례에서 관측된 비율이며, 실제 발생 빈도를 의미하지 않습니다.

오진 함정

[Hypothesis] 오류 메시지에 new가 표시되더라도 객체 생성 자체가 항상 문제인 것은 아닙니다. 클래스 속성 선언부의 초기값 제한이나 객체 생성 결과에 대한 참조 대입 구문을 먼저 구분해야 합니다.

[Observation] 사례 1은 객체 생성을 생성자로 옮겨 해결했고, 사례 2와 사례 3은 참조 연산자를 제거해 해결했습니다.

환경 매트릭스

환경 또는 위치관측된 문제관측된 수정
PHP 클래스 속성 선언부new MemberDao() 초기화에서 unexpected T_NEW 발생객체 생성을 생성자로 이동 후 인스턴스 속성에 할당
PHP 5의 오래된 코드=& new SomeClass() 사용 시 unexpected new (T_NEW) 발생& 제거 후 일반 객체 할당
PHP 5.6에서 PHP 7로 업그레이드$this->a =& new test(...)에서 오류 발생참조 연산자 제거 후 $this->a = new test(...) 사용

[Observation] 사례 2와 사례 3은 PHP 버전 변화와 =& new 구문 제거를 함께 언급합니다.

진단 순서

  1. [Observation] 오류가 발생한 코드가 클래스 속성 선언부의 초기값인지 확인합니다.
  2. [Observation] 해당 초기값에 new 객체 생성 표현식이 포함되어 있는지 확인합니다.
  3. [Observation] 대입문에 =& new 또는 & new 형태가 있는지 확인합니다.
  4. [Observation] PHP 5에서 PHP 7로 업그레이드된 코드인지 확인합니다.
  5. [Observation] 클래스 속성 초기화라면 객체 생성을 생성자로 이동하고, 참조 대입이라면 참조 연산자를 제거해 일반 객체 할당으로 변경합니다.

참고 자료

PHP: Backward incompatible changes - Manual (새 창에서 열림)

PHP · 공식 자료 · 확인 범위: PHP 7에서는 `new` 문의 결과를 변수에 참조로 대입할 수 없습니다., `$c =& new C;` 예제는 PHP 7에서 `Parse error: syntax error, unexpected 'new' (T_NEW)`를 출력합니다., 이 구문은 PHP 5에서 참조 대입이 deprecated라는 메시지를 출력했습니다., PHP 7에서는 `new` 결과를 일반 대입으로 받아야 하므로, 같은 오류 문자열과 `=& new` 구문이 함께 있으면 참조 대입 연산자를 제거한 뒤 같은 버전에서 재확인할 수 있습니다. · 확인일: 2026-07-27

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: PHP 클래스 속성 선언부에서 new MemberDao()로 객체를 초기화하면 unexpected T_NEW 구문 오류가 발생합니다., 클래스 속성의 초기값은 컴파일 시점에 평가 가능한 상수여야 합니다., 객체 생성을 생성자로 옮기고 인스턴스 속성에 할당하는 수정이 제시되었습니다. · 확인일: 2026-07-30

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: PHP 5 코드에서 $obj =& new SomeClass() 구문을 실행할 때 unexpected new (T_NEW)가 발생했습니다., =& new 구문은 PHP 5에서 폐기되고 PHP 7에서 제거되었습니다., 참조 연산자를 제거하고 일반 객체 할당으로 변경하는 수정이 제시되었습니다. · 확인일: 2026-07-30

Stack Overflow · 운영 사례 (새 창에서 열림)

확인 범위: PHP 5.6에서 PHP 7로 올린 뒤 $this->a =& new test(...) 구문에서 unexpected new (T_NEW)가 발생했습니다., PHP 7은 new 표현식 결과를 참조로 대입하는 구문을 허용하지 않습니다., 참조 연산자를 제거해 일반 객체 할당으로 변경하는 수정이 제시되었습니다. · 확인일: 2026-07-30