При изучении отложенной загрузки метаданных я встретил следующие строки кода :
// 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()
функцию?
functions
customization
SarahCoding
источник
источник
Ответы:
В любом
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
передается в функциюисточник
unset( $value )
послеforeach
цикла,wp_reset_postdata()
если вы использовалиsetup_postdata( $post )
вforeach
цикле, иreset()
устанавливает внутренний указатель обратно к первому элементу в массиве. Если я ошибаюсь или если вам есть что добавить, вы должны сделать это в ответе, чтобы мы все выиграли от этого. ИМХО, это вопрос, от которого может выиграть большая часть сообщества, и если я ошибаюсь, поправьте меня и отправьте правильный ответ