Php 将两个函数与其中的计数器组合在一起
我有以下功能Php 将两个函数与其中的计数器组合在一起,php,counter,Php,Counter,我有以下功能 function header_class() { $count = 0; if ( is_active_sidebar( 'sidebar-15' ) ) $count++; if ( is_active_sidebar( 'sidebar-16' ) ) $count++; if ( is_active_sidebar( 'sidebar-17' ) ) $count++;
function header_class() {
$count = 0;
if ( is_active_sidebar( 'sidebar-15' ) )
$count++;
if ( is_active_sidebar( 'sidebar-16' ) )
$count++;
if ( is_active_sidebar( 'sidebar-17' ) )
$count++;
if ( is_active_sidebar( 'sidebar-18' ) )
$count++;
$class = '';
switch ( $count ) {
case '1':
$class = 'one';
break;
case '2':
$class = 'two';
break;
case '3':
$class = 'three';
break;
case '4':
$class = 'four';
break;
}
if ( $class )
echo 'class="' . $class . '"';
}
function footer_class() {
$count = 0;
if ( is_active_sidebar( 'sidebar-11' ) )
$count++;
if ( is_active_sidebar( 'sidebar-12' ) )
$count++;
if ( is_active_sidebar( 'sidebar-13' ) )
$count++;
if ( is_active_sidebar( 'sidebar-14' ) )
$count++;
$class = '';
switch ( $count ) {
case '1':
$class = 'one';
break;
case '2':
$class = 'two';
break;
case '3':
$class = 'three';
break;
case '4':
$class = 'four';
break;
}
if ( $class )
echo 'class="' . $class . '"';
}
我试图将它们组合为一个函数,即主题类。现在,这段代码对这两个函数都是通用的,因此它们不需要重复
$class = '';
switch ( $count ) {
case '1':
$class = 'one';
break;
case '2':
$class = 'two';
break;
case '3':
$class = 'three';
break;
case '4':
$class = 'four';
break;
}
if ( $class )
echo 'class="' . $class . '"';
我的问题是,如何在不塞满计数器的情况下将这两个函数的其他部分(如下面的示例)组合在一起
$count = 0;
//counter1
if ( is_active_sidebar( 'sidebar-15' ) )
$count++;
if ( is_active_sidebar( 'sidebar-16' ) )
$count++;
if ( is_active_sidebar( 'sidebar-17' ) )
$count++;
if ( is_active_sidebar( 'sidebar-18' ) )
$count++;
//counter 2
if ( is_active_sidebar( 'sidebar-11' ) )
$count++;
if ( is_active_sidebar( 'sidebar-12' ) )
$count++;
if ( is_active_sidebar( 'sidebar-13' ) )
$count++;
if ( is_active_sidebar( 'sidebar-14' ) )
$count++;
阅读一些关于“依赖注入”的文章,这是一个相当不错的模式
function get_sidebar_class( $sidebars ) {
// cound active sidebars
$count = 0;
foreach ($sidebars as $sidebar)
if ( is_active_sidebar( $sidebar ) )
$count++;
// name the class state
$classes = [ 0=>'', 'one', 'two', 'three', 'four' ];
$class = isset($classes[$count]) ? $classes[$count] : '';
// output information
if ( $class )
echo sprintf( 'class="%s"', $class);
}
get_sidebar_class( ['sidebar-11', 'sidebar-12', 'sidebar-13', 'sidebar-14'] );
get_sidebar_class( ['sidebar-15', 'sidebar-16', 'sidebar-17', 'sidebar-18'] );
此语法要求php版本>=5.4。如果仍在使用旧版本,则必须改用显式数组构造:
get_sidebar_类(数组('sidebar-11','sidebar-12','sidebar-13','sidebar-14')
和$classes=数组('1','2','3','4')代码>…工作正常。只需从sprintf()中删除echo