Я чувствую, что следующий код можно сократить, но не знаю, как его переписать :)
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if( $post_type == 'faq' && !isset( $_REQUEST['mode'] ) )
$_REQUEST['mode'] = 'excerpt';
// if I just go with else... it doesn't work
elseif( $post_type !== 'faq' && !isset( $_REQUEST['mode'] ) )
$_REQUEST['mode'] = 'list';
Обновить
Как вы можете видеть !isset( $_REQUEST['mode'] )
используется дважды. $post_type == 'faq'
также используется дважды, но в elseif я проверяю отрицательный.
Серьезно, нет способа переписать его одному, if
без else
...?
Как насчет использования тернарного оператора для тестирования "faq"?
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = ($post_type == 'faq') ? 'excerpt' : 'list';
}
Попробуй это
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
$_REQUEST['mode'] = !isset($_REQUEST['mode'])?(($post_type==='faq')?'excerpt':'list'):'';
Ваш фактический код может быть разрешен для:
if (!isset($_REQUEST['mode'])) {
if (isset($_GET['post_type'])) {
$_REQUEST['mode'] = ($_GET['post_type'] == 'faq') ? 'excerpt' : 'list';
}
}
Но действительно ли это лучше? Я имею в виду, что вы обязательно вернетесь к своему коду некоторое время в будущем...
возможно, использовать более промежуточные переменные, чтобы улучшить читаемость операторов if.
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
$notRequestMode=!isset( $_REQUEST['mode'] );
if( $post_type == 'faq' && $notRequestMode)
$_REQUEST['mode'] = 'excerpt';
// if I just go with else... it doesn't work
elseif( $post_type !== 'faq' && $notRequestMode)
$_REQUEST['mode'] = 'list';
Так как вам нужен короткий, здесь короткий, основанный на вашем примере кода.
if(!isset( $_REQUEST['mode'] )){
$_REQUEST['mode'] = 'list';
if($_GET['post_type']=="faq")
$_REQUEST['mode'] = 'excerpt';
}
Есть хороший шанс, что у вас много $post_type
, поэтому я бы сначала установил это в switch
:
switch($post_type) {
case 'faq':
// code here
break;
case 'somethingElse':
// code here
break;
// etc.
Оттуда вы можете даже вставить другой переключатель в $_REQUEST['mode']
если это необходимо, или просто включить ваши операторы if
.
В качестве примечания о форматировании, если у меня есть много условий, я положу эти условия на несколько строк:
if (
$post_type == 'faq' &&
!isset( $_REQUEST['mode'] ) &&
// more conditions here
) {
if
для вашего $post_type === 'faq'
и внутренний оператор if
для остальных условий.
В PHP 5. 3+ вы можете использовать сокращенный тройной:
$post_type = $_GET['post_type'] ?: '';
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = $post_type == 'faq' ? 'excerpt' : 'list';
}
Но самое короткое, вероятно:
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = isset($_GET['post_type']) && $_GET['post_type'] == 'faq' ? 'excerpt' : 'list';
}
Или на одной линии с укороченной тройкой:
$_REQUEST['mode'] = $_REQUEST['mode'] ?: (isset($_GET['post_type']) && $_GET['post_type'] == 'faq' ? 'excerpt' : 'list');