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


Я с тобой, fwiw. Я посмотрел на исходный код функции, документы codex & dev и не вижу, к чему относится этот комментарий.
Энди Маколай-Брук

Ответы:


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.