我觉得可以缩短以下代码,但不知道如何重写代码:)
$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'
也被使用了两次,但是在ifif我正在检查否定。
说真的没有办法在没有if
的情况下将其重写为一个else
?
答案 0 :(得分:0)
可能使用更多的中间变量,以提高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';
答案 1 :(得分:0)
很有可能你有很多$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
) {
答案 2 :(得分:0)
因为你想要简短,根据你的示例代码来做空。
if(!isset( $_REQUEST['mode'] )){
$_REQUEST['mode'] = 'list';
if($_GET['post_type']=="faq")
$_REQUEST['mode'] = 'excerpt';
}
答案 3 :(得分:0)
您的实际代码可以解析为:
if (!isset($_REQUEST['mode'])) {
if (isset($_GET['post_type'])) {
$_REQUEST['mode'] = ($_GET['post_type'] == 'faq') ? 'excerpt' : 'list';
}
}
但它真的更好吗?我的意思是,你肯定会在将来的某个时间回到你的代码......
答案 4 :(得分:0)
如何使用三元运算符测试'faq'?
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if (!isset( $_REQUEST['mode'] )) {
$_REQUEST['mode'] = ($post_type == 'faq') ? 'excerpt' : 'list';
}
答案 5 :(得分:0)
试试这个
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
$_REQUEST['mode'] = !isset($_REQUEST['mode'])?(($post_type==='faq')?'excerpt':'list'):'';
答案 6 :(得分:0)
在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');