Коли ви повинні, а коли не слід використовувати 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()функцію?


Я з тобою, юначе. Я переглянув джерело функцій, кодекси та документи розробників і не бачу, на що йдеться у цьому коментарі.
Енді Маколей-Брук

Відповіді:


3

У будь-якому foreachциклі останнє значення масивного циклу, що перекидається, залишається після закінчення foreachциклу. Ось чому насправді завжди слід скинути це значення після завершення foreachциклу.

wp_list_pluck()є також просто базовим foreachциклом, якщо $index_keyйого не пройти. Крім того, як і в будь-якому foreachциклі, останнє значення масиву залишається після закінчення foreachциклу, і я думаю, що саме так називається цей рядок у кодексі.

Однак це припущення неправильне. Функції - це автономні фрагменти коду, і за винятком глобалів, ці фрагменти коду всередині функції доступні лише для самої функції. wp_list_pluck()не глобалізує жодне з своїх інтенальних значень ( змінних ), тому навіть якщо останнє значення масиву все ще доступне після 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 )в foreachциклі, і reset() встановлює внутрішній покажчик назад до першого елементу в масиві. Якщо я помиляюся, або якщо у вас є щось інше або інше додати, ви повинні зробити це у відповіді, щоб ми всі отримали користь від цього. ІМХО, це питання, від якого може отримати користь більшість громади, і якщо я помиляюся, виправте мене тоді і опублікуйте належну відповідь
Пітер Гусен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.