【问题标题】:Shorter way to write if else statement?写 if else 语句的更短的方法?
【发布时间】:2012-11-26 09:32:19
【问题描述】:
<?php
  $typeface = $page->typeface();
    if($typeface == '') {
  } else {
      echo '<li><span>Typeface: </span>'.$typeface.'</li>';
  }
?>


我最初尝试了下面的 PHP 代码,但它仍然会输出 HTML:
&lt;li&gt;&lt;span&gt;Typeface: &lt;/span&gt;&lt;/li&gt;,即使字符串为空。


<?php $typeface =  $page->typeface(); 
  if (!empty($typeface)): ?>
    <li><span>Typeface: </span><?php echo $typeface ?></li> 
  <?php endif; ?>


所以我的问题是,我怎样才能以更短的方式在最顶部编写代码?

【问题讨论】:

    标签: php if-statement


    【解决方案1】:
    $typeface = trim($page->typeface());
    if($typeface != '')
        echo '<li><span>Typeface: </span>'.$typeface.'</li>';
    

    编辑:(删除新行)

    $typeface = trim(str_replace(array("\r", "\r\n", "\n"), '', $page->typeface()));
    if($typeface != '')
        echo '<li><span>Typeface: </span>'.$typeface.'</li>';
    

    【讨论】:

    • 我也会应用修剪以防万一。
    • @PeterKiss 你是什么意思修剪?如果值为空,我确实有一个空行。我将如何删除它?
    • if(trim($page->typeface()) != '') { /* ... */ }
    • 修剪仍然留下空白行。
    • 非常感谢@vlcekmi3
    【解决方案2】:

    试试这个

    (isset($typeface) && !empty($typeface))?echo "<li><span>Typeface: </span>".$typeface."</li>":"";
    

    【讨论】:

    • @ChristopherBurton 已编辑...立即尝试
    • 那行得通。不过,我仍然遇到视图源中出现空行的问题。
    【解决方案3】:
    ($typeface=="")?echo "":echo '<li><span>Typeface: </span>'.$typeface.'</li>';
    

    【讨论】:

      【解决方案4】:

      试试这个..

      $typeface = $page->typeface();
      echo $res=($typeface != '')?'<li><span>Typeface: </span>'.$typeface.'</li>':'';
      

      【讨论】:

        【解决方案5】:

        根据$page-&gt;typeface() 方法的返回类型和代码的位置(看起来您在模板视图上),我可能会选择:

        <?php if ($typeface === $page->typeface()): ?>
            <li><span>Typeface: </span><?=$typeface?></li>
        <?php endif; ?>
        

        这里有 PHP 文档:

        Alternative syntax for control structures

        See here 了解使用&lt;?=...?&gt; 短标签时应注意的事项。

        &lt;?=...?&gt; 的替代方案是:&lt;?php echo $typeface; ?&gt;

        希望有帮助!


        编辑:

        实际上,我早先怀疑自己(我责怪睡眠不足)。我原来有这个代码(trim()除外):

        <?php if ($typeface = trim($page->typeface())): ?>
            <li><span>Typeface: </span><?=$typeface?></li>
        <?php endif; ?>
        

        我在if() 中设置变量$typeface。这种技术应该将您的代码缩短一行。

        这是一个使用简单字符串的工作示例:

        <?php $foo = ""; ?>
        ...
        <?php if ($typeface = trim($foo)): ?>
            <li><span>Typeface: </span><?=$typeface?></li>
        <?php endif; ?>
        

        ...输出:没有。

        <?php $foo = 'I\'m a string!'; ?>
        ...
        <?php if ($typeface = trim($foo)): ?>
            <li><span>Typeface: </span><?=$typeface?></li>
        <?php endif; ?>
        

        ...输出:&lt;li&gt;&lt;span&gt;Typeface: &lt;/span&gt;I'm a string!&lt;/li&gt;(显然,缺少打开和关闭&lt;ul&gt;&lt;/ul&gt;

        【讨论】:

        • 由于某种原因,当没有值时仍然输出&lt;li&gt;&lt;span&gt;Typeface: &lt;/span&gt;&lt;/li&gt;
        • @ChristopherBurton 当我第一次发布代码时,我收到了$typeface = $page-&gt;typeface()(复制/粘贴错误)。我把它改成了$typeface === $page-&gt;typeface()(注意===)。希望这就是它对您不起作用的原因?
        • 我仍然得到相同的结果。
        • 天哪,我不想浪费你的时间......你可以修剪一下,就像其他人说的那样:&lt;?php if ($typeface === trim($foo)): ?&gt;?当我使用这些变量进行测试时:&lt;?php $typeface = "blah"; $foo = "blah"; ?&gt;,其中$foo 是我的$page-&gt;typeface() 版本,它适用于我... $page->typeface() 预期返回类型/值是什么?我假设这是一个空/非空字符串返回?再说一次,我不是要浪费你的时间(看起来你已经得到了很多很好的答案)。 :)
        • @ChristopherBurton 尽管你已经得到了答案,但我已经更新了我的答案……我最初的想法是站得住脚的(参见我上面的 EDIT)。我有时喜欢在if() 检查中分配变量...可以减少代码行数。如果这不起作用,那么您可能需要应用更硬核的修剪,如solution above 中使用的修剪。编码愉快!
        猜你喜欢
        • 2011-12-15
        • 2011-05-26
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 2012-04-25
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        相关资源
        最近更新 更多