PHP函数返回。允许秘籍

时间:2011-03-01 14:08:15

标签: php function return echo

行。

我有一个很长很复杂的功能。

看起来几乎就像这个:

    <?php
            function hello() {

                    echo 'My Function!' ?>
                    <ul>
                    <li> Blablabla </li>
                    <ul>
                    (...)
    <?php } ?>

这里的巨大问题是我无法回应任何事情。

我的功能必须返回它的内容而不是回显或直接输出(它必须是那样,它是一个Wordpress短代码,当我回声 - 内容显示在页面顶部 - 总是,不是在我想要的地方):

   <?php
                function hello() {

                        $output .= 'My Function!'; 
                        $output .= '<ul>';
                        $output .='<li> Blablabla </li>';
                        $output .='<ul>';
                        (...)

                        return $output;
         } ?>

我希望到现在为止这很容易。

现在,真正的问题是:

我有很多直接输入代码,如:

?> 

<div>
    <span>
        <p>Smth</p>
        <a>smth</a>
    </span>
</div>

<?php

在任何地方添加$ output会杀死漂亮的段落/空白并且代码变得非常难以阅读和理解(并且所有HTML元素现在都是变量的一部分,所以即使我的php编辑器也没有很好地对待它们并将它们着色为PHP元素)。

另外一件事,我有很多像这样的线:

<a href="<?php bloginfo('template_directory');  ?>/includes/php/timthumb.php?src=<?php echo $url; ?>&h=<?php if($items=="one") echo 320; elseif($items=="two") echo 230; elseif($items=="three") echo 180; elseif($items=="four") echo 130; ?>&w=<?php if($items=="one") echo 600; elseif($items=="two") echo 420; elseif($items=="three") echo 277; elseif($items=="four") echo 203; ?>" title="<?php the_title(); ?>" class="link">

(是的,这是一行)

我完全不知道如何将这些行添加到$ output。

$output .= '<a href="<?php bloginfo('template_directory');  ?>/includes/php/timthumb.php?src=<?php echo $url; ?>&h=<?php if($items=="one") echo 320; elseif($items=="two") echo 230; elseif($items=="three") echo 180; elseif($items=="four") echo 130; ?>&w=<?php if($items=="one") echo 600; elseif($items=="two") echo 420; elseif($items=="three") echo 277; elseif($items=="four") echo 203; ?>" title="<?php the_title(); ?>" class="link"> ';

当然不起作用(即使是'和'之前的')。

我相信必须有一种更简单的方法来附加所有返回的代码,但是如何? 我尝试过ob_start();在代码之前返回ob_get_clean();之后,但它输出短代码名称而不是内容。

3 个答案:

答案 0 :(得分:4)

很难想象你在这里要解决的问题是什么 - 虽然我不熟悉wordpress。你不能只调用输出应该去的函数吗?

你可以使用输出缓冲 - 像往常一样使用echo / print但是......

ob_start();
hello();
$output=ob_get_contents();
ob_end_clean();

但这并不能解决您仍需要在页面中的正确位置发送到浏览器的问题 - 如果可以的话:

print $output;

在正确的地方,你肯定可以这样做:

hello();

在同一个地方。

答案 1 :(得分:2)

我同意symcbean,但这可能是与Wordpress集成的更实用的方法:如果你现在有一个名为hello()的函数显示HTML,你可能要考虑将该函数重命名为hello_content()(或类似的东西)并用symcbean提供的建议替换hello()函数:

function hello_content( ) {
   echo "foo";
}

function hello( ) {
   ob_start( );
   hello_content( );
   return ob_get_clean( );
}

这应该可以解决你的问题。

答案 2 :(得分:1)

PHP Heredoc语法将使事情看起来整洁,您可以将输出返回到变量。只要您不需要任何常量,它就可以正常工作。

你以这种方式使用它:

function bar() {
    $var = <<<EOV
    anything here
    anything there
EOV;

    return $var;
}