PHP回音问题?

时间:2009-10-06 20:18:41

标签: php syntax refactoring

我真的需要这么多回音,还是可以缩短它?

<?php
if (!empty($url))
{
    echo '<p>Job: <span>' . $job .'</span></p>';
    echo '<p>Skills: <span class="caps">' . $skills . '</span></p>';
    echo '<p>Website: <a href="http://' . $url . '" title="' . $url . '">http://' . $url . '</a></p>';
    echo '<p>Pay:' . $pay. '</p>';
} else { 
    echo'';
} 
?>

9 个答案:

答案 0 :(得分:10)

为什么不还原呢?

<?php if(!empty($url)) { ?>
 <p>Job: <span><?=$job?></span></p>
 <p>Skills: <span class="caps"><?=$skills?></span></p>
 <p>Website: <a href="http://<?=$url?>/" title="<?=$url?>">http://<?=$url?></a></p>
 <p>Pay: <?=$pay?></p>
<?php } ?>

答案 1 :(得分:7)

当然,并且不需要else无效:

<?php

if(!empty($url)) {
  echo "<p>Job: <span>{$job}</span></p>";
  echo "<p>Skills: <span class=\"caps\">{$skills}</span></p>";
  echo "<p>Website: <a href=\"http://{$url}\" title=\"{$url}\">http://{$url}</a></p>";
  echo "<p>Pay: {$pay}</p>";
}

?>

......甚至:

<?php

if(!empty($url)) {
  echo "<p>Job: <span>{$job}</span></p>
        <p>Skills: <span class=\"caps\">{$skills}</span></p>
        <p>Website: <a href=\"http://{$url}\" title=\"{$url}\">http://{$url}</a></p>
        <p>Pay: {$pay}</p>";
}

?>

答案 2 :(得分:3)

如果要使用echo,则不需要连接多行或还原。你的问题的实际答案是这个(因为它仍然使用echo):

  <?php
        if (!empty($url))
        {
        echo '<p>Job: <span>' . $job .'</span></p>
    <p>Skills: <span class="caps">' . $skills . '</span></p>
        <p>Website: <a href="http://' . $url . '" title="' . $url . '">http://' . $url . '</a></p>
        <p>Pay:' . $pay. '</p>';
        }
        ?>

Php并不关心你使用多少行。

答案 3 :(得分:3)

我想你可以:

  • 使用点(.)进行字符串连接,并使用单个echo
  • 或在单个echo中使用多个字符串,以逗号“,”分隔

有关示例,请参阅echo manual page

对于第一个解决方案:

echo 'a' . 'b' . 'c';

而且,对于第二个:

echo 'd', 'e', 'f';

输出将是:

abcdef


另一种解决方案是在double-quoted string中使用变量插值:

$my_var = "test";
echo "this is a $my_var";

哪能得到你:

this is a test


例如,使用两者:

$job = 'my job';
$skills = 'my skills';
$url = 'google.com';
$pay = 3.14;

echo "<p>Job: <span>$job</span></p>"
    . "<p>Skills: <span class=\"caps\">$skills</span></p>"
    . "<p>Website: <a href=\"http://$url\" title=\"$url\">http://$url</a></p>"
    . "<p>Pay:$pay</p>";

你会得到:

Job: my job
Skills: my skills
Website: http://google.com
Pay:3.14

但请注意,你必须逃脱",这不容易做到: - (


那么,另一个解决方案,基于heredoc syntax

echo <<<STR
<p>Job: <span>$job</span></p>
<p>Skills: <span class="caps">$skills</span></p>
<p>Website: <a href="http://$url" title="$url">http://$url</a></p>
<p>Pay:$pay</p>
STR;

只有一个echo,没有字符串连接,没有转义 - 还有什么可以要求的?
; - )

答案 4 :(得分:2)

当然这也可以做到这一点:

echo '<p>Job: <span>' . $job .'</span></p><p>Skills: <span class="caps"></span></p><p>Website: <a href="http://' . $url . '" title="' . $url . '">http://' . $url . '</a></p><p>Pay:' . $pay. '</p>';

您可以添加\n以获得更易读的HTML。

或者你可以使用这个在PHP方面更具可读性的那个:

echo "<p>Job: <span>{$job}</span></p><p>Skills: <span class=\"caps\"></span></p><p>Website: <a href=\"http://{$url}\" title=\"{$url}\">http://{$url}</a></p><p>Pay:{$pay}</p>";

或者您可以使用更具可读性的heredoc语法:

echo <<<HTML
    <p>Job: <span>$job</span></p>
    <p>Skills: <span class="caps"></span></p>
    <p>Website: <a href="http://$url" title="$url">http://$url</a></p>
    <p>Pay:$pay</p>
HTML;

如果你真的想echo,那么你可以切断其他分支 - 好吧 - 什么也没有。

答案 5 :(得分:0)

你可以用单个回声和连接来做所有这些,这只是“。” ,是的,你需要为else stmt再多一个echo。

答案 6 :(得分:0)

您可能想尝试sprintf。 你可以这样做:

<?php echo sprintf('<p>Job: <span>%s</span></p>', $job); ?>

答案 7 :(得分:0)

如果我是你,我会开始使用模板。那里有很多模板引擎......我强烈推荐Smarty。 http://www.smarty.net/

这将允许您将代码与显示逻辑分开。这意味着您可以选择不同的模板,或将模板提供给设计人员,而设计人员无需了解任何有关php的知识。它还允许您在以后查看代码并轻松调试/更改它。没有什么比尝试阅读整个html和php混杂的代码更糟糕了。

代码:

//this part will instigate a copy of smarty
require_once('/location_of_smarty_lib/Smarty/Smarty.class.php');
$blah = new Smarty();
$blah ->template_dir = '/location_of_smarty_lib/smarty/templates';
$blah ->compile_dir  = '/location_of_smarty_lib/smarty/templates_c';
$blah ->cache_dir    = '/location_of_smarty_lib/smarty/cache';
$blah ->config_dir   = '/location_of_smarty_lib/smarty/configs';

//this part assigns variables to tags
$blah->assign('t_url',$url);
$blah->assign('t_job',$job);
$blah->assign('t_skills',$skills);
$blah->assign('t_pay',$pay);
//this will display the out put using the given template
$blah->display('yargh.tpl');

模板(称为yargh.tpl):

{if $t_url}
 <p>Job: <span>{$t_job}</span></p>
 <p>Skills: <span class="caps">{$t_skills}</span></p>
 <p>Website: <a href="http://{$t_url}/" title="{$t_url}">http://{$t_url}</a></p>
 <p>Pay: {$t_pay}</p>
{/if}

答案 8 :(得分:-1)

您可以,但为了便于阅读,最好是保留它吗?我认为这不会影响具有多个回声的脚本的性能。