如何使这个PHP if语句更加简单和简短?
我觉得下面的代码可以缩短,但不知道如何重写:) 更新 如您所见,如何使这个PHP if语句更加简单和简短?,php,if-statement,Php,If Statement,我觉得下面的代码可以缩短,但不知道如何重写:) 更新 如您所见,!isset($\u请求['mode'])使用了两次。 $post\u type=='faq'也被使用了两次,但在elseif中我选择了否定 严重的是,如果没有else,就无法将其重写为一个if。可以使用更多的中间变量,以提高if语句的可读性 $post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : ''; $notRequestMode=!isset( $_RE
!isset($\u请求['mode'])
使用了两次。
$post\u type=='faq'
也被使用了两次,但在elseif中我选择了否定
严重的是,如果没有
else
,就无法将其重写为一个if
。可以使用更多的中间变量,以提高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';
很有可能您有很多
$post\u类型
,因此我将首先在开关中设置它:
switch($post_type) {
case 'faq':
// code here
break;
case 'somethingElse':
// code here
break;
// etc.
从那里,您甚至可以在适当的情况下为$\u请求['mode']
嵌套另一个开关,或者只包含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 (
$post_type == 'faq' &&
!isset( $_REQUEST['mode'] ) &&
// more conditions here
) {
由于您需要short,下面是基于示例代码的short
if(!isset( $_REQUEST['mode'] )){
$_REQUEST['mode'] = 'list';
if($_GET['post_type']=="faq")
$_REQUEST['mode'] = 'excerpt';
}
您的实际代码可以解析为:
if (!isset($_REQUEST['mode'])) {
if (isset($_GET['post_type'])) {
$_REQUEST['mode'] = ($_GET['post_type'] == 'faq') ? 'excerpt' : 'list';
}
}
但这真的更好吗?我的意思是,你肯定会在将来某个时候回到你的代码中去…使用三元运算符来测试“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'):'';
在PHP 5.3+中,您可以使用以下缩写:
$post_type = $_GET['post_type'] ?: '';
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = $post_type == 'faq' ? 'excerpt' : 'list';
}
$_REQUEST['mode'] = $_REQUEST['mode'] ?: (isset($_GET['post_type']) && $_GET['post_type'] == 'faq' ? 'excerpt' : 'list');
但最短的可能是:
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = isset($_GET['post_type']) && $_GET['post_type'] == 'faq' ? 'excerpt' : 'list';
}
或在具有缩短的三元数的单行上:
$post_type = $_GET['post_type'] ?: '';
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = $post_type == 'faq' ? 'excerpt' : 'list';
}
$_REQUEST['mode'] = $_REQUEST['mode'] ?: (isset($_GET['post_type']) && $_GET['post_type'] == 'faq' ? 'excerpt' : 'list');
可能是这样的:if(!isset($\u REQUEST['mode']){if($post\u type==='faq'){}else{}
?您应该了解。你所做的是代数,知道规则会帮助你简化语句。你想让它更简短,这样其他开发人员在阅读你的代码时就会遇到麻烦这是为我而不是为其他人@RocketHazmat您正在使用大量的{和}@RafcioKowalsky:我建议您尽可能使用{}
。如果要在if
块中添加第二行怎么办?我只是想越来越简化我的代码。我不需要查看更多的$post_类型,只需要查看“faq”。如果我的问题不清楚,很抱歉。@RafcioKowalsky在这种情况下,只需为您的$post\u type==='faq'
提供一个外部if
语句,并为其余条件提供内部if
语句。@RafcioKowalsky您可以,我需要检查post_类型是否设置了,虽然我可以在代码上方留下注释,但几个月后我仍然可以理解:)我选择你的答案,因为我最理解它,而且它比我的短。我也可以省略{}。