언제, 언제하면 안 되는가, wp_list_pluck ()?


10

메타 데이터 지연 로딩에 대해 배우면서 다음 코드 줄을 만났습니다 .

// Don't use `wp_list_pluck()` to avoid by-reference manipulation.
$comment_ids = array();
if ( is_array( $comments ) ) {
    foreach ( $comments as $comment ) {
        if ( $comment instanceof WP_Comment ) {
            $comment_ids[] = $comment->comment_ID;
        }
    }
} 

나는 그것이이 주제와 관련이 있다고 생각 했지만 여기에 참조가 없으며 유일한 foreach루프가 함수 안에 싸여 있습니다.이 경우 참조 조작이 어떻게 발생할 수 있습니까?

그리고 모범 사례를 위해 언제 wp_list_pluck()함수 를 사용해야 합니까?


나는 당신과 함께 있습니다. 함수 소스, 코덱 및 개발자 문서를 살펴 보았으며 해당 주석이 무엇을 의미하는지 알 수 없습니다.
Andy Macaulay-Brook

답변:


3

모든 foreach루프에서 루프되는 배열의 마지막 값은 루프가 끝난 후에도 유지 foreach됩니다. 이것이 foreach루프가 끝난 후에 항상 그 값을 항상 설정 해제해야하는 이유 입니다.

wp_list_pluck()전달되지 않으면 기본 foreach루프 일뿐 $index_key입니다. 또한 모든 foreach루프 와 마찬가지로 배열의 마지막 값은 foreach루프 끝 이후에도 유지 되며 이것이 코덱에서 해당 라인이 참조하는 것으로 생각합니다.

그러나 그 가정은 잘못되었습니다. 함수 는 자체 포함 된 코드 조각이며 전역을 제외하고 함수 내의 이러한 코드 조각은 함수 자체에서만 사용할 수 있습니다. wp_list_pluck()내부 값 ( variables )을 세계화하지 않으므로 foreach함수 의 루프 후 배열의 마지막 값을 계속 사용할 수 있고 설정되지 않은 경우에도 함수 외부의 코드 조각에서는 사용할 수 없습니다. 따라서 코덱의 해당 줄에 설명 된대로 참조 별 전달 문제를 가질 수 없습니다.

wp_list_pluck()간단한 foreach루프 처럼 사용할 수 있습니다 . 선택은 당신에게 달려 있습니다. 개인적 wp_list_pluck()으로 코드를 절약 하는 것을 선호 하며 나중에 악몽을 디버깅 할 수있는 변수를 설정 해제 할 필요가 없습니다.

마지막 참고 사항이며 함수에 전달 되면 동일하게 작동하므로 wp_list_pluck()바꿀 수도 있습니다array_column$index_key


설정 해제 또는 재설정?
fuxia

@toscho AFAIK 내가 배운 것과, unset( $value )foreach루프, wp_reset_postdata()당신이 사용 된 경우 setup_postdata( $post )A의 foreach루프와 reset() 배열의 첫 번째 항목에 대한 내부 포인터를 다시 설정합니다. 내가 틀렸거나 추가 할 것이 있거나 다른 것이 있다면, 우리 모두가 그 혜택을 누리도록 대답해야합니다. IMHO, 이것은 대부분의 커뮤니티가 혜택을 누릴 수있는 질문이며, 틀린 경우 저를 정정 한 다음 정답을 게시하십시오
Pieter Goosen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.