简单的PHP回声不起作用?

时间:2012-09-06 18:18:48

标签: php function echo

我的代码存在问题。我很确定它与报价有关。让我演示一下。

这很好用:

<?php if ( $is_latest_post ) echo '
hello world
'; ?>

这不起作用:

<?php if ( $is_latest_post ) echo '
<a class="recent<?php $category = get_the_category(); echo $category[0]->category_nicename; ?>" href="<?php bloginfo('url'); ?>/<?php echo $category[0]->category_nicename; ?>"><?php echo $category[0]->cat_name; ?></a>
'; ?>

为什么不起作用?我可以改变什么才能使它发挥作用?代码的a class部分完全在if ( $is_latest_post )语句之外。感谢我刚开始用PHP学习编码。

4 个答案:

答案 0 :(得分:6)

当您将字符串封装在单引号中时,它会将该字符串视为文字。 PHP不会解析该字符串中的代码。

您需要的是连接。点运算符.允许您将多个字符串混合在一起。

<?
if ( $is_latest_post ) {
    $category = get_the_category();
    echo '
    <a class="recent' . $category[0]->category_nicename . '" href="' . bloginfo('url') . '/'. $category[0]->category_nicename . '">' . $category[0]->cat_name . '</a>';
}
?>

你可以将任意多个事物连接在一起。

<?
    $a = 1;
    $b = 2.0;
    $c = 'string';
    $d = function_call();

    $string = $a . $b . 'random text' . $c . $d;

?>

答案 1 :(得分:1)

    <?
    if ( $is_latest_post ) {
        $category = get_the_category();
        echo "<a class=\"recent" . $category[0]->category_nicename . "href=\"" . bloginfo('url') . "/". $category[0]->category_nicename. "\">" .$category[0]->cat_name."</a>";
}
    ?>

除了Kevin的回答,我更喜欢使用双引号而不是单引号,并在需要时将其转义。

答案 2 :(得分:1)

您无法在字符串文字中执行php代码。浏览器不会显示空标记,因为它们中没有任何内容可以呈现。

答案 3 :(得分:0)

您正在使用单引号作为初学者。这永远不会评估任何PHP代码 - 它只会打印出来。

编辑:如果blogInfo()返回一个字符串(返回$ somevar),请使用下面的代码。

<?php

if ( $is_latest_post ) 
{
    $category = get_the_category(); 
    $template = '<a class="recent%s" href="%s/%s">%s</a>';
    $blogInfo = bloginfo('url');

    echo sprintf(
        $template,
        $category[0]->category_nicename,
        $bloginfo,
        $category[0]->category_nicename,
        $category[0]->cat_name
    );
}
?>

如果blogInfo()在屏幕上回显数据(echo $ somevar),请使用下面的代码。

<?php

if ( $is_latest_post ) 
{
    $category = get_the_category(); 
    $prefix   = '<a class="recent%s" href="';
    $suffix   = '/%s">%s</a>';

    echo sprintf(
        $prefix,
        $category[0]->category_nicename,
    );

    bloginfo('url');

    echo sprintf(
        $suffix,
        $category[0]->category_nicename,
        $category[0]->cat_name
    );
}
?>

sprintf允许您在模板中“注入”变量。

我强烈建议您重新访问您的代码并尝试尽可能简单。在表示层(即回声)中进行一系列赋值和函数调用将使您的代码很难理解和维护。