"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > `array_shift()`가 "엄격한 표준: 변수만 참조로 전달되어야 합니다"를 트리거하는 이유는 무엇입니까?

`array_shift()`가 "엄격한 표준: 변수만 참조로 전달되어야 합니다"를 트리거하는 이유는 무엇입니까?

2024년 12월 21일에 게시됨
검색:386

Why Does `array_shift()` Trigger

오류 메시지 "엄격한 표준: 변수만 참조로 전달되어야 합니다."

array_shift()를 사용할 때 엄격한 표준을 보고할 수 있습니다. 전달된 인수가 함수 호출의 결과인 경우 경고합니다. 이 동작은 항상 경고를 트리거하지 않기 때문에 일관성이 없어 보입니다.

다음 코드를 고려하세요.

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

이 예에서는 find() 메서드가 변수가 아니기 때문에 경고가 발생합니다. 그러나 다음 코드는 경고를 생성하지 않습니다.

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

이 동작을 이해하기 위해 다른 코드 조각을 분석해 보겠습니다.

error_reporting(E_STRICT);
class test {
    function test_arr(&$a) {
        var_dump($a);
    }
    function get_arr() {
        return array(1, 2);
    }
}

$t = new test;
$t->test_arr($t->get_arr());

이 코드는 $t->get_arr() 메소드가 변수가 아니고 참조로 전달되기 때문에 엄격한 표준 경고를 생성합니다. 메서드가 배열 값을 반환하기 때문에 이 동작은 직관에 어긋납니다.

엄격 모드에서 이 오류를 방지하려면 참조 사용을 방지하도록 메서드 서명을 변경하거나 중간 변수를 사용하세요.

function test_arr($a) {
    var_dump($a);
}

$inter = get_arr();
$el = array_shift($inter);
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3