V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RiseAgainst
V2EX  ›  PHP

为什么用echo输出html时这些值会跳出标签??

  •  
  •   RiseAgainst · 2012-08-12 07:50:25 +08:00 · 4799 次点击
    这是一个创建于 4481 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如:
    function test(){
    echo "SUCK";
    }

    echo'<a href="#">'.test().'</a>';
    我期望的结果是一个在a标签里的SUCK。
    可是浏览器一看
    结果是:suck<a href="#"></a>
    为什么会这样呢?
    9 条回复    1970-01-01 08:00:00 +08:00
    bufannao
        1
    bufannao  
       2012-08-12 08:23:13 +08:00   ❤️ 1
    return 'SUCK';
    lcxz
        2
    lcxz  
       2012-08-12 09:19:43 +08:00
    support up,
    haiyang416
        3
    haiyang416  
       2012-08-12 09:33:59 +08:00   ❤️ 1
    在执行的时候会优先运行test()函数,但是你函数是直接打印‘suck’,等打印完之后才有echo..所以....
    应该改成return
    justfly
        4
    justfly  
       2012-08-12 11:20:06 +08:00
    当然是return啦
    liyandong
        5
    liyandong  
       2012-08-12 12:00:57 +08:00
    return
    Rabbit52
        6
    Rabbit52  
       2012-08-12 12:51:39 +08:00   ❤️ 1
    return是没错,我觉得原理应该是在输出缓冲之前php先要执行里面的方法,而这个方法是输出字符串,所以这个字符串就在最后的那串字符串之前了
    RiseAgainst
        7
    RiseAgainst  
    OP
       2012-08-14 01:24:01 +08:00
    @Rabbit52
    @haiyang416

    感谢。那么如果一个程序自定函数本身就是ECHO。又没有参数能够RETURN,又需要它ECHO的值。这种情况改怎么做呢?
    并且我也是在写一个新函数 如果是直接HTML里就没问题。
    ljbha007
        8
    ljbha007  
       2012-08-14 01:53:38 +08:00   ❤️ 1
    @RiseAgainst

    echo '<a href="#">;
    test();
    echo '</a>';
    evlos
        9
    evlos  
       2012-08-14 02:24:08 +08:00
    楼上的方法有一定的局限性,如果没办法有正确的运行顺序就不能用了。

    ob_start();
    echo 'xxx';
    $result = ob_get_clean();
    //这里就不会直接输出,而是存到 $result 里面
    //要输出的时候再 echo $result;

    @RiseAgainst
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4557 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.