Передача аргументов функциям в php
У меня есть некоторый php-код, который в значительной степени дублируется, за исключением незначительных различий в именах переменных. Как я могу превратить это в функцию многократного использования, где я могу передавать аргументы через?
Это код, который я использую дважды. Второе - то же самое, за исключением того, что все ссылки на "филиал" заменены на "социальные".
<?php
$affiliate = wp_list_bookmarks( array( 'categorize' => 0, 'category' => '7', 'title_li' => '', 'orderby' => 'rating', 'show_images' => 0, 'echo' => 0 ) );
preg_match_all( '/<li>.*?<\/li>/', $affiliate, $affiliate_matches );
foreach ( $affiliate_matches[0] as $affiliate_match ) {
preg_match( '/title=".*?"/', $affiliate_match, $affiliate_title );
echo str_replace(
$affiliate_title[0],
$affiliate_title[0] . ' ' . strtolower( str_replace( array( 'title="', ' ' ), array( 'class="', '-' ), $affiliate_title[0] ) ),
$affiliate_match
) . "\n";
}
?>
Другой это:
<?php
$social = wp_list_bookmarks( array( 'categorize' => 0, 'category' => '2', 'title_li' => '', 'orderby' => 'rating', 'show_images' => 0, 'echo' => 0 ) );
preg_match_all( '/<li>.*?<\/li>/', $social, $social_matches );
foreach ( $social_matches[0] as $social_match ) {
preg_match( '/title=".*?"/', $social_match, $social_title );
echo str_replace(
$social_title[0],
$social_title[0] . ' ' . strtolower( str_replace( array( 'title="', ' ' ), array( 'class="', '-' ), $social_title[0] ) ),
$social_match
) . "\n";
}
?>
Я думал, может быть, я могу вызвать функцию как
<?php links( array( 'affiliate', 7 ) ); ?>
или же
<?php links( array( 'social', 2 ) ); ?>
Сохранит ли их объединение в многократно используемую функцию время и ресурсы на обработку или это не имеет значения?
2 ответа
Единственное, что действительно изменяется, это идентификатор категории, поэтому вам нужно только передать это функции.
function links($categoryId) {
$affiliate = wp_list_bookmarks( array( 'categorize' => 0, 'category' => $categoryId, 'title_li' => '', 'orderby' => 'rating', 'show_images' => 0, 'echo' => 0 ) );
preg_match_all( '/<li>.*?<\/li>/', $affiliate, $affiliate_matches );
foreach ( $affiliate_matches[0] as $affiliate_match ) {
preg_match( '/title=".*?"/', $affiliate_match, $affiliate_title );
echo str_replace(
$affiliate_title[0],
$affiliate_title[0] . ' ' . strtolower( str_replace( array( 'title="', ' ' ), array( 'class="', '-' ), $affiliate_title[0] ) ),
$affiliate_match
) . "\n";
}
}
Это не сэкономит компьютерного времени, а сэкономит ваше время, не поддерживая код дважды. (Но обратите внимание, что преобразование его в функцию не заставляет вас тратить больше усилий, чем просто дважды).
Кроме того, я не вижу смысла передавать слово "социальный" функции - оно фактически нигде не используется.