减少或简化以下检查适用输入字段的 php 函数的好方法是什么?
<?php
$options = get_option( 'navbar_style', '' );
$right = $left = $fade = '';
if( isset( $options['style'] ) ) {
if( $options['style'] == 'right' ) {
$right = ' checked="checked"';
}
if( $options['style'] == 'left' ) {
$left = ' checked="checked"';
}
if( $options['style'] == 'fade' ) {
$fade = ' checked="checked"';
}
}
?>
<label><input type='radio' name='navbar_style[style]' value='right' <?php echo $right; ?> >Right <em>(Default)</em></label>
<label><input type='radio' name='navbar_style[style]' value='left' <?php echo $left; ?> >Left</label>
<label><input type='radio' name='navbar_style[style]' value='fade' <?php echo $fade; ?> >Fade</label>
可以使用动态变量设置,但是不推荐!请参阅下一个示例以正确使用。
$options['style'] = 'left';
$right = $left = $fade = '';
if (in_array($options['style'] ?? '', ['right', 'left', 'fade'])) {
${$options['style']} = ' checked="checked"';
}
var_dump($right, $left, $fade);
string(0) ""
string(18) " checked="checked""
string(0) ""
一个更简洁的方法是这个版本并使用例如
$checks['left']
而不是$left
.
$checks = [];
foreach (['right', 'left', 'checked'] as $check) {
$checks[$check] = $options['style'] === $check ? ' checked="checked"' : '';
}
var_dump($checks);
array(3) {
'right' =>
string(0) ""
'left' =>
string(18) " checked="checked""
'checked' =>
string(0) ""
}
创建一个函数并传入选项可能更紧凑,那么它只是一个测试,看看是否设置了该选项并返回相应的 html ...
function styleCheck($option, $options)
{
return ($options['style'] ?? '') == $option ? ' checked="checked"' : '';
}
?>
<label><input type='radio' name='navbar_style[style]' value='right'<?php echo styleCheck('right', $options); ?>>Right <em>(Default)</em></label>
<label><input type='radio' name='navbar_style[style]' value='left'<?php echo styleCheck('left', $options); ?>>Left</label>
<label><input type='radio' name='navbar_style[style]' value='fade'<?php echo styleCheck('fade', $options); ?>>Fade</label>
你也可以这样做:
$style = ['right' => '', 'left' => '', 'fade' => ''];
if (isset($options['style']) && array_key_exists($options['style'], $style)) {
$style[$options['style']] = ' checked="checked"';
}
你可以试试这个:
$options = get_option( 'navbar_style', '' );
$styles = array('right', 'left', 'fade');
$checked = array_fill_keys($styles, '');
if(isset($options['style']) && in_array($options['style'], $styles)) {
$checked[$options['style']] = 'checked="checked"';
}
作为一名程序员,您应该留意代码中的重复模式。显然,有重复的 HTML 标记,文本调整最少。首字母缩略词 D.R.Y 的意思是“不要重复自己”。
创建一个包含这些动态数据点的数组,然后实现一个循环来生成所需的标记。这将有助于防止拼写错误并使您的脚本更易于维护。
代码:(演示)
$options = ['style' => 'left'];
$radios = [
'right' => 'Right <em>(Default)</em>',
'left' => 'Left',
'fade' => 'Fade',
];
foreach ($radios as $value => $text) {
printf(
"<label><input type='radio' name='navbar_style[style]' value='%s'%s>%s</label>\n",
$value,
($options['style'] ?? '') === $value ? ' checked' : '',
$text
);
}