如何使这个PHP if语句更简单,更短?

时间:2014-11-07 18:36:51

标签: php if-statement

我觉得可以缩短以下代码,但不知道如何重写代码:)

$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

7 个答案:

答案 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');