DEV WIKI
백엔드 · 오류·증상

When I do the following, the output is printed in the wrong order:

PHP 표현식 안에서 호출한 함수가 값을 반환하지 않고 출력해 출력 순서가 예상과 달라지는 문제입니다.

빠른 답변

우선 확인할 원인
표현식에서 함수 결과를 사용하려면 함수 내부에서 값을 echo하지 말고 return해야 합니다.
먼저 확인할 항목
출력 순서가 예상과 다른 코드에서 함수 호출이 문자열 연결 등 표현식 안에 있는지 확인합니다.
적용 범위
현재 증상과 본문에 적은 관찰 조건이 함께 확인된 경우
출처 확인일
2026-07-29
최종 검토
2026-07-24
수정일
2026-07-27
관련 기술
오류·수정 제보 (새 창에서 열림)

현재 증상

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

먼저 확인할 항목

출력 순서가 예상과 다른 코드에서 함수 호출이 문자열 연결 등 표현식 안에 있는지 확인합니다.

해당 함수가 결과를 `echo`로 직접 출력하는지 확인합니다.

표현식에서 사용할 결과는 함수가 `return`으로 반환하도록 변경합니다.

환경별 원인과 조치

When I do the following, the output is printed in

the wrong order:

PHP 표현식 안에서 함수 호출 결과를 문자열과 연결할 때, 함수가 값을 반환하지 않고 echo로 출력하면 출력 순서가 예상과 달라질 수 있습니다.

확인 및 복구

  1. 출력 순서가 예상과 다른 코드에서 함수 호출이 문자열 연결 등 표현식 안에 있는지 확인합니다.
  2. 해당 함수가 결과를 echo로 직접 출력하는지 확인합니다.
  3. 표현식에서 사용할 결과는 함수가 return으로 반환하도록 변경합니다.

함수 호출 결과를 표현식에서 사용하려면 함수가 값을 반환해야 합니다.

진단 기록

먼저 문제가 발생한 URL 또는 화면, 표시 시각, 사용한 플랫폼과 배포 버전을 기록합니다. 화면과 로그에서 오류 문자열이 일부만 보이면 앞뒤 문장을 포함해 원문을 보존하고, 민감한 값은 가립니다.

다음 순서로 관찰값을 대조합니다.

  1. 출력 순서가 예상과 다른 코드에서 함수 호출이 문자열 연결 등 표현식 안에 있는지 확인합니다.
  2. 해당 함수가 결과를 echo로 직접 출력하는지 확인합니다.
  3. 표현식에서 사용할 결과는 함수가 return으로 반환하도록 변경합니다.

각 항목은 확인한 값과 확인하지 못한 이유를 함께 기록해야 합니다. 이 문서의 조건과 실제 관찰값이 다르면 원인을 단정하지 말고, 문제 해결 시작 가이드에서 더 넓은 분기를 선택하십시오.

판정 기준

오류 문자열이 일치한다는 사실만으로 원인이 확정되지는 않습니다. 같은 문구가 여러 환경에서 나타날 수 있으므로 웹서버·런타임·운영체제·최근 변경 사항을 함께 비교합니다. 한 단계에서 기대한 값이 나오지 않으면 다음 단계로 넘어가지 말고 해당 환경의 공식 문서를 우선 확인합니다.

안전한 다음 단계

검사 전에 백업과 변경 이력을 확인하고, 비밀번호·세션 쿠키·인증 토큰·개인정보를 공개 로그나 문의 내용에 넣지 않습니다. 설정·권한·데이터를 변경해야 한다면 영향 범위와 되돌리는 방법을 먼저 기록한 뒤 운영 시간과 승인 절차에 맞춰 진행합니다.

원인 분포

[Observation] 입력된 3건의 사례에서는 함수 내부의 직접 출력과 함수 반환값을 호출부에서 다시 출력하는 방식의 혼용이 공통적으로 관찰되었습니다.

[Observation] 3건 중 1건에서는 함수 내부 출력이 문자열 연결보다 먼저 실행되어 출력 순서가 달라졌습니다.

[Observation] 이 분포는 관측된 사례 기준이며 실제 발생 빈도를 의미하지 않습니다.

오진 함정

  • [Observation] echo 표현식의 문자열 연결 순서만 확인하면 함수 내부에서 이미 실행된 echo를 놓칠 수 있습니다.
  • [Observation] 함수가 값을 반환하는지 직접 출력하는지 확인하지 않으면 반환값과 화면 출력이 혼용된 문제를 찾기 어렵습니다.
  • [Observation] WordPress shortcode에서는 함수 내부 직접 출력이 아니라 반환 문자열을 사용해야 하는 사례가 확인되었습니다.

환경 매트릭스

환경·사용 방식관찰된 문제사례에서 확인된 수정
일반 PHP 문자열 연결함수 내부 echo가 연결된 문자열보다 먼저 출력됨함수가 문자열을 return하고 외부에서 한 번만 echo
파일 경로 생성 함수반환값과 직접 출력 혼용으로 호출 결과 처리 어려움경로를 return하고 호출부에서 echo record_loc(...)
WordPress shortcode함수가 HTML을 직접 출력함함수가 문자열을 반환하도록 수정

진단 순서

  1. [Observation] 문제를 일으키는 호출부에서 echo와 문자열 연결을 확인합니다.
  2. [Observation] 연결식에 포함된 함수가 내부에서 echo 또는 기타 직접 출력을 실행하는지 확인합니다.
  3. [Observation] 함수의 출력 책임을 확인합니다. 입력된 사례에서는 함수가 값을 return하고 호출부가 한 번만 echo하도록 수정했습니다.
  4. [Observation] 수정 후 호출부가 기대한 문자열 순서로 출력되는지 확인합니다. 사례 3에서는 Samhellohello Sam으로 바뀌었습니다.

참고 자료

PHP · 공식 자료 (새 창에서 열림)

확인 범위: 원문 예제에서 함수는 echo로 값을 출력하고, 그 함수 호출은 문자열 연결 표현식 안에 사용됩니다., 원문은 표현식에서 함수 결과를 사용하려면 echo가 아니라 return으로 값을 반환해야 한다고 설명합니다. · 확인일: 2026-07-24

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

확인 범위: 함수가 HTML을 직접 echo하고 호출부에서 문자열 연결에 사용되면 호출부가 출력 시점을 제어하기 어렵습니다., 함수가 출력 대신 값을 return하면 호출부에서 출력 시점을 제어할 수 있습니다., WordPress shortcode에서는 함수가 반환한 문자열을 사용하도록 수정했습니다. · 확인일: 2026-07-29

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

확인 범위: 파일 경로 생성 함수가 반환값과 직접 출력을 혼용하면 호출 결과를 다루기 어렵습니다., 함수 내부에서 경로를 return하고 화면에서 echo record_loc(...)로 출력하도록 변경했습니다. · 확인일: 2026-07-29

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

확인 범위: echo 'hello ' . moo()에서 moo()가 먼저 echo를 실행해 Samhello가 출력되었습니다., 함수가 문자열을 return하고 외부에서 한 번만 echo하면 hello Sam으로 출력됩니다. · 확인일: 2026-07-29