有没有办法从PHP函数打印值而不返回?

时间:2017-04-25 11:14:29

标签: php function

我基本上有两个相关的查询:

考虑类中的以下PHP函数,例如xyz.php

arrayRight
  1. 在案例1中,有没有办法通过调用另一个函数中的函数来获取回显值,但是而不使用return语句

  2. 在case2中,有没有办法停止echo语句打印的值(我只想返回值)?

2 个答案:

答案 0 :(得分:1)

您需要使用输出缓冲:

ob_start();
$foo->sendResponse();
$response = ob_get_clean();

这就是为什么它首先不是一个实用的设计。如果你让这个函数总是返回值,那么根据自己的喜好做这两件事是微不足道的:

$response = $foo->sendResponse();
echo $foo->sendResponse();
<?=$foo->sendResponse()?> 

(最后一个选项是为了说明目的而共享的,并不打算对短开标签展开火焰战。)

答案 1 :(得分:1)

回答你的问题在于output buffer(ob),希望这会帮助你理解。这里我们使用三个函数ob_start()将启动输出缓冲区,ob_end_clean()将清除缓冲区的输出,ob_get_contents将输出为字符串,直到现在才回显。 This可以帮助您更好地理解ob_get_contents

Try this code snippet here

<?php

class x
{
    function sendResponse()
    {
        $car = "Lambo1";
        echo $car;
    }

    function sendResponseTwo()
    {
        $car = "Lambo2";
        echo $car;
        return $car;
    }

    function getResponse()
    {
        //case 1:
        $carName = $this->sendResponse();
        //ABOVE WON'T WORK AS THE FUNCTION RETURNS NOTHING.
        //case 2:
        $carName = $this->sendResponseTwo();
        //THIS WILL PRINT THE NAME OF CAR
    }

}
ob_start();//this will start output buffer
$obj= new x();
$obj->getResponse();
$string=ob_get_contents();//this will gather complete content of ob and store that in $string
ob_end_clean();//this will clean the output buffer
echo $string;
?>