PHP if/else 语句

3
我该如何用PHP编写以下语句:
如果body的ID为"home",则插入一些HTML,例如:
<h1>I am home!</h1>

否则,请插入以下html代码:
<p>I'm not home.</p>
6个回答

5

使用原生PHP模板实现:

<?php if ($bodyID==='home') { ?>
    <h1>I am home!</h1>
<?php } else { ?>
    <p>I'm not home!</p>
<?php } ?>

2
在92K的水平上,您应该知道比较运算符的使用方法,先生。应该始终使用==作为相等检查,而不是使用Identical。因为您不知道OP是否正在使用使用__tostring()的对象。 - RobertPitt
我为什么要想要一个使用__tostring()的对象是相等的呢?这似乎会引起更多的错误而不是解决问题。(就我个人而言,如果我将字符串与非字符串进行比较,我更喜欢抛出异常,因为这几乎肯定意味着我犯了一个错误。)同时,等号操作符带来了一些严重的问题(例如字符串作为数字进行比较),这是我绝对不想要的。更可能正确的比较器是=== - bobince
谢谢bobince。我已经尝试过了,但它对我也没有用。我正在将其插入到header.php模板文件中。我有什么遗漏吗? - lnvrt
你得到了什么输出?$bodyID 实际包含什么?它是否被执行了? - bobince
body ID 是 <body id="home">,其中包含所有的 HTML。其他页面有 <body class="internal">,它们都从相同的 header.php 文件中读取,我正在将您的代码插入其中。您的代码在所有页面上输出的结果都是相同的,“我不在家”。 - lnvrt
显示剩余2条评论

1
你可以尝试使用这个:
$html = '';
if ( $body_id === 'home' )
{
    $html .= '<h1>I am home!</h1>';
}
else
{
    $html .= '<p>I\'m not home.</p>';
}

echo $html;

这将根据 $body_id 变量及其包含的内容回显 HTML 代码。


根据提问者的经验水平,你可能需要在文件开头使用"<?php"。 - Oxyrubber
将HTML代码分配给变量并在执行完成时一次性转储所有内容始终是一个好的实践,但对于不同类型的输出来说这是有争议的。 - Etienne Marais
@Hannes 在 if 语句中进行类型检查是一个好的编程习惯。这可以使你的代码符合标准,并且不会对这个小脚本的性能产生任何影响。 - Etienne Marais
@Hannes:双等号运算符很疯狂,而且不太令人满意。'123'==' 123'。@etbal:我会避免将输出 HTML 放在字符串中。这只会增加额外的转义层需要担心。PHP 是一种模板语言,最好使用它。 - bobince
@etbal @bobince 但在这种特殊情况下,类型检查没有任何作用,事实上,在某些条件下甚至可能会破坏代码,请考虑此示例http://pastebin.com/01TCMebV如果您检查所有强烈的`$body_id == 'home',则$body_id`必须是一个字符串。 - Hannes
@Hannes:我不想要自定义类实例与字符串成功比较。如果我在预期为字符串变量的位置接收到一个自定义对象,那么这是一个错误,我希望它失败。当我比较字符串值时,99%的情况下我想要的是简单的字符串比较,就像其他大多数编程语言一样。PHP 的 == 不是字符串比较,它是一种疯狂的分裂的东西,在这种特定情况下可能不会出错,但在其他情况下肯定会出错。它是不可靠的,使用应该是例外而不是规则。 - bobince

1
您可以使用类似以下的 switch 命令:
switch($body)
{
    case 'home': //$body == 'home' ?
        echo '<h1>I am home!</h1>';
    break;

    case 'not_home':
    default:
        echo '<p>I'm not home.</p>';
    break;
}

default 表示如果 $body 不匹配任何 case 值,则会使用它,default 是可选的。

另一种方法就像你所说的,使用 if/else 语句,但如果在模板/视图页面中,应该尝试使用以下方式:

<?php if ($body == 'home'):?>
    <h1>I am home!</h1>
<?php else:?>
    <p>I'm not home!</p>
<?php endif; ?>

谢谢,最后一段代码看起来是最简洁的,但是我无法让它工作。我正在将它插入到header.php文件中...我是不是漏掉了什么? - lnvrt
更新您目前的代码,并使用“echo $body”输出以查看其包含的内容。 - RobertPitt
抱歉,Robert,我不明白你的意思? - lnvrt
如果您更新您的问题并附上您试图修复的代码,我们可以查看一下。 - RobertPitt

1
假设 $bodyID 是一个变量:
<?php 
    if ($bodyID==='home') {
        echo "<h1>I am home!</h1>";}
    else {
        echo "<p>I'm not home!</p>";}
?>

0

个人而言,我认为在不刷新页面、也不需要设置变量(如 $body 或类似的)的情况下实现这一点的最佳方法是使用JavaScript代码,因为JS和PHP之间的“通信”是单向的。

<script language="javascript">
<!--
if( document.body.id === "home" ){
    window.document.write("<h1>I am home!</h1>") ;
}
else{
    window.document.write("<p>I'm not home!</p>") ;
}
-->
</script>

否则,您可以构建一个表单,然后使用$_GET函数获取body.id值...这始终取决于您现在需要做什么操作来使用body.id值。
希望这对您有所帮助并且清晰易懂。

谢谢,我希望我能使用JavaScript!但是我的客户严格禁止使用js,所以这很棘手! - lnvrt

0

你可以尝试以下方式:

$body_id = "home";

if ($body_id == "home") {
    echo "I am home!";
} else {
    echo "I am not home!";
}

或者

$body_id = "home"; 

if (strcmp($body_id, "home") !== 0) { 
    echo 'I am not home!'; 
} 
else { 
    echo 'I am home!'; 
} 

参考:

https://www.geeksforgeeks.org/string-comparison-using-vs-strcmp-in-php/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接