Khi nào bạn nên và khi nào không nên sử dụng wp_list_pluck ()?


10

Trong khi tìm hiểu về siêu dữ liệu tải, tôi đã gặp những dòng mã này :

// 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;
        }
    }
} 

Tôi nghĩ rằng nó liên quan đến chủ đề này nhưng không có tài liệu tham khảo nào ở đây và foreachvòng lặp duy nhất được bọc bên trong một hàm, làm thế nào thao tác tham chiếu có thể xảy ra trong trường hợp này?

Và, để thực hành tốt nhất, khi nào chúng ta nên sử dụng wp_list_pluck()chức năng?


Tôi với bạn, fwiw. Tôi đã xem nguồn tài liệu, tài liệu codex & dev và không thể thấy nhận xét đó đề cập đến điều gì.
Andy Macaulay-Brook

Câu trả lời:


3

Trong bất kỳ foreachvòng lặp nào , giá trị cuối cùng của mảng được lặp lại vẫn còn sau khi kết thúc foreachvòng lặp. Đó là lý do tại sao một người thực sự nên luôn luôn bỏ đặt giá trị đó sau khi foreachvòng lặp được thực hiện.

wp_list_pluck()cũng chỉ là một foreachvòng lặp cơ bản nếu $index_keykhông được thông qua. Ngoài ra, như với bất kỳ foreachvòng lặp nào , giá trị cuối cùng của mảng vẫn còn sau khi kết thúc foreachvòng lặp và tôi nghĩ đây là những gì dòng đó đề cập đến trong bộ mã.

Tuy nhiên, giả định đó là sai. Các hàm là các đoạn mã tự chứa và ngoại trừ toàn cục, các đoạn mã này bên trong một hàm chỉ khả dụng đối với chính hàm đó. wp_list_pluck()không toàn cầu hóa bất kỳ giá trị ( biến ) nào của nó , vì vậy ngay cả khi giá trị cuối cùng của mảng vẫn có sẵn sau foreachvòng lặp bên trong hàm và không được đặt, nó không có sẵn cho bất kỳ đoạn mã nào ngoài hàm, do đó bạn không thể có vấn đề chuyển qua tham chiếu như được mô tả trong dòng đó trong bộ mã.

wp_list_pluck()là hợp lệ để sử dụng như bất kỳ foreachvòng lặp đơn giản . Sự lựa chọn là tùy thuộc vào bạn. Cá nhân tôi thích wp_list_pluck()vì nó tiết kiệm mã và bạn không cần phải nhớ bỏ đặt các biến mà sau này có thể dẫn đến gỡ lỗi ác mộng.

Chỉ cần một lưu ý cuối cùng, wp_list_pluck()cũng có thể thay thế array_columnvì nó hoạt động tương tự nếu $index_keyđược chuyển đến chức năng


Bỏ đặt hoặc đặt lại?
fuxia

@toscho AFAIK và từ những gì tôi đã học được, unset( $value )sau một foreachvòng lặp, wp_reset_postdata()nếu bạn đã sử dụng setup_postdata( $post )trong một foreachvòng lặp và reset() đặt con trỏ bên trong trở lại mục đầu tiên trong một mảng. Nếu tôi sai, hoặc nếu bạn có bất cứ điều gì khác hoặc khác để thêm vào, bạn nên làm điều đó trong một câu trả lời để tất cả chúng ta đều được hưởng lợi từ đó. IMHO, đây là một câu hỏi mà hầu hết cộng đồng có thể được hưởng lợi, và nếu tôi sai, hãy sửa lại cho tôi và đăng câu trả lời thích hợp
Pieter Goosen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.