【问题标题】:Simple PHP echo does not function? [closed]简单的 PHP 回显不起作用? [关闭]
【发布时间】:2012-09-06 18:18:48
【问题描述】:

我的代码有问题。我很确定它与引用有关。让我演示一下。

这很好用:

<?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 编码。

【问题讨论】:

  • 它不起作用是什么意思?什么都不输出?还是不是您期望的输出?
  • 为什么所有嵌套的 标签?
  • 也许您应该在浏览器中“查看源代码”。回声很可能有效,但是无论您在锚文本中放置的内容都不是。
  • @andrewsi 我更新了我的问题。它给出了一个错误。但是代码在 if 语句之外可以完美运行。
  • @SabeenMalik 不,它给出了一个错误:解析错误:语法错误,意外的 T_STRING,期待 ',' 或 ';'

标签: php function echo


【解决方案1】:

当您将字符串封装在单引号中时,它将将该字符串视为文字。 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;

?>

【讨论】:

  • 能否请您写下整个代码,以便我测试它是否有效?
  • 我刚刚测试了你的代码,它返回了一个错误。也许你在某个地方有错字?错误是:Parse error: syntax error, unexpected T_ENDWHILE in
  • T_ENDWHILE 暗示您的代码中某处有一个 while 循环。当我替换虚拟值时,我给你的代码有效。你肯定在别处有错别字。
  • 是的,这段代码是循环执行的。我该怎么做才能使它在该循环中工作?该代码在 IF 语句之外完美运行。
  • 让它在循环内工作是一个不同的问题。我认为您需要将$category[0] 替换为$category[$i] 或类似名称。如果您不知道如何编写循环,我建议您阅读 php 手册。
【解决方案2】:
    <?
    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>";
}
    ?>

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

【讨论】:

  • 确实,单引号用来提供更好的性能;现在它只是一种习惯的力量。
  • 只是不要告诉那些痴迷于微观性能的人 :D :D
  • 干杯,但这仍然不能解决我的问题,因为正在显示相同的错误。如何在循环中执行此操作...?
  • 我猜你需要用 $category[i]->category_nicename 替换 $category[0]->category_nicename,其中 i 是循环计数器。
  • 如果您发布循环会有所帮助 - 因为您的问题对我们来说是个谜。
【解决方案3】:

您不能在字符串文字中执行 php 代码。浏览器不会显示空标签,因为其中没有可呈现的内容。

【讨论】:

    【解决方案4】:

    您在开始时使用单引号。这永远不会评估任何 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 允许您在模板中“注入”一个变量。

    我强烈建议您重新访问您的代码并尝试使其尽可能简单。在表示层中有一堆赋值和函数调用(即回显)将使您的代码非常难以理解和维护。

    【讨论】:

    • 我测试了你的代码并得到了这个错误:Parse error: syntax error, unexpected T_ENDWHILE。此代码在循环中执行。我需要改变什么才能让它在那里工作?
    • 我忘记了 if 语句的右括号,我注意到并更正了。如果您不介意,请再次测试。
    • 我刚刚又测试了一次,它没有返回错误,但也没有返回任何其他内容。空。
    • $template 必须作为第一个参数传递给sprintf
    • 在这种情况下, $is_latest_post 的值是多少?如果它不是真的,那么代码块将永远不会执行。
    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多