如何在if语句中嵌入php

时间:2017-07-07 08:21:46

标签: php

可能是一个新手,但我不能得到元名="描述"排工作。你应该关闭并打开PHP代码,如果它是嵌套的,对吗?

谢谢! /罗伯特

<?php 
    $blogname = get_bloginfo('name');
    if ($blogname == 'Wobbling Willy') {
        echo '<meta name="description" content="?><?php bloginfo('description'); ?><?php" />'."\n";
        echo '<meta name="keywords" content=”keyword1, keyword2, keyword3” />'."\n";
    }
?>

3 个答案:

答案 0 :(得分:2)

我自己喜欢这种语法(使用混合HTML / PHP时)

<?php 
    $blogname = get_bloginfo('name');
    if ($blogname == 'Wobbling Willy'):  //-note- colon not semi-colon
?>
<meta name="description" content="<?= bloginfo('description'); ?>" />
<meta name="keywords" content=”keyword1, keyword2, keyword3” />
<?php endif; ?>

OR

<?php 
    $blogname = get_bloginfo('name');
    if ($blogname == 'Wobbling Willy'){  //open bracket
?>
<meta name="description" content="<?= bloginfo('description'); ?>" />
<meta name="keywords" content=”keyword1, keyword2, keyword3” />
<?php } // close bracket?>

它更短,你不必担心引用。甚至使用heredoc 但这涉及将bloginfo('description')设置为变量和其他一些怪癖......

<?php 
    $blogname = get_bloginfo('name');
    if ($blogname == 'Wobbling Willy'){  //open bracket
        $description = bloginfo('description');
        echo <<<HTML
            <meta name="description" content="$description" />
            <meta name="keywords" content=”keyword1, keyword2, keyword3” />
HTML; //nothing can go here no space ( before or after ) and not even this comment, nothing but HTML; litterally
    } 
?>

HEREDOC是我的首选方式,但我从不在同一个文件中混用HTML和PHP。因为我使用模板系统。

答案 1 :(得分:1)

试试这个:

<?php 
    $blogname = get_bloginfo('name');
    if ($blogname == 'Wobbling Willy') {
        echo '<meta name="description" content="'.bloginfo('description').'"/>\n';
        echo '<meta name="keywords" content="keyword1, keyword2, keyword3"/>\n';
    }
?>

答案 2 :(得分:0)

在回答OP关于嵌套PHP标记的问题时,PHP开始和结束标记的嵌套仅适用于HTML代码中的,如下所示:

<div id="<?php echo $id; ?>">

注意:这种将HTML和PHP混合在一起的风格在几年前就更加流行了;如今这不被认为是最好的风格。相反,重点在于关注点的分离,如模型 - 视图 - 控制器设计模式所反映的那样。并且,在PHP中嵌套PHP代码不是要做的事情,并且可能会产生解析错误。

在修复代码的各种方法中,您可能希望查看使用live demo语法的heredoc

OP的片段有趣的是它实际上没有嵌套在PHP代码中的任何PHP标记。事实上,如果你删除多余的标签,只允许一个开放标签,代码只需要稍微调整就可以工作,如下所示:

// these function implementations are just for demo purposes:
function get_bloginfo($n) {
   return ("Wobbling Willy");
}
function bloginfo($d){
   return("some lovely description ...");
}

$blogname = get_bloginfo('name');
if ($blogname == 'Wobbling Willy') {
    echo '<meta name="description" content="';
    echo bloginfo('description'),'"/>',"\n"; 
    echo '<meta name="keywords" content="keyword1, keyword2, keyword3" />'."\n";
}

请参阅demo

除非作为函数或构造的参数提供,否则不会出现bloginfo()的返回值,例如 echo ,它将输出它。如果根据需要使用单引号,则在尴尬时拆分“description”元标记的显示将起作用。最后,卷曲引号可能会有问题,在这种情况下,我将用第二个元标记包含关键字的内容替换为第二个元标记的内容。