>백엔드 개발 >PHP 튜토리얼 >PHP의 엄격 모드에서 '변수만 참조로 전달되어야 합니다'라고 경고하는 이유는 무엇입니까?

PHP의 엄격 모드에서 '변수만 참조로 전달되어야 합니다'라고 경고하는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-01 13:55:19476검색

Why Does PHP's Strict Mode Warn

엄격한 표준: "변수만 참조로 전달해야 합니다" 경고 이해

PHP에서 엄격 모드는 특정 프로그래밍 방식을 시행하여 개선합니다. 코드 품질과 일관성. 그러한 관행 중 하나는 변수가 아닌 값을 참조로 전달하는 것을 피하는 것입니다. 이 질문은 이 경고의 원인을 탐색하고 이를 방지하기 위한 솔루션을 제공합니다.

문제: 참조 매개변수 및 반환 값

다음 코드 조각을 고려하세요.

$el = array_shift($instance->find(..))

이 코드는 "변수만 참조로 전달해야 합니다."라는 엄격한 표준 경고를 트리거합니다. 그러나 다음 코드는 그렇지 않습니다.

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

이 동작을 이해하려면 PHP의 참조 처리를 자세히 살펴봐야 합니다. 참조가 함수에 전달되면 해당 매개변수가 참조하는 변수에 대한 모든 변경 사항이 원래 변수에 반영됩니다. 첫 번째 코드 조각에서 $instance->find(...)는 변수가 아닌 배열을 반환합니다. 이 배열을 참조로 전달하면 경고가 발생합니다.

예외 이해

그러나 이 예외는 오해의 소지가 있습니다. 두 번째 코드 조각에서 get_arr() 함수는 배열을 반환하는데, 이는 참조가 전달될 수 있음을 의미합니다. 그러나 함수 자체는 참조 매개변수를 사용하지 않으므로 경고를 방지합니다.

경고를 방지하는 해결 방법

경고를 제거하려면 두 가지 옵션이 있습니다. :

  1. 메서드 서명 수정: 사용하는 메서드의 서명을 변경합니다. 더 이상 사용하지 않으려면 참조 매개변수를 사용하세요.
  2. 중간 변수 사용: 참조 매개변수를 사용하지 않는 메서드의 반환 값을 담을 중간 변수를 만듭니다. 그런 다음 중간 변수를 참조로 전달합니다.

예:

function get_arr(){
    return array(1, 2);
}

$inter = get_arr();
$el = array_shift($inter);

중간 변수 $inter를 사용하면 반환 값 전달을 방지할 수 있습니다. get_arr()을 직접 참조하여 엄격한 표준 경고를 해결합니다.

위 내용은 PHP의 엄격 모드에서 '변수만 참조로 전달되어야 합니다'라고 경고하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.