PHP return vs echo


PHP return vs echo

我有一系列的函数,假设,在最后创建一个表单。它们驻留在类中,如以下示例:

class ExampleForm{
    protected $_html = '';
    protected $_element;
    public function __construct($element){
        $this->_element = $element;   
    protected function _open_form(){
       echo $this->_html .= '<form>';
    }
    public function create_form(){
       $this->_open_form()
       $this->_html .= $this->_element;
       echo "some content";
       $this->_close_form()
    }
    protected function _close_form(){
        echo $this->_html .= '</form>'
    }
    public function __toString(){
        return $this->_html;
}
实例化:

$element = 'some element';
new ExampleForm($element);

一个更全面的例子可以在Github的第86行看到

如果你想看这个的现场演示,那你就不需要我了。在一天结束的时候,如果你在网页上检查表单,你会看到在表单开始标签的上方有两个隐藏字段,它们需要在表单标签中

现在有人会认为这会创建一个这样的表单:

<form>
    element
    some conent
</form>

然而,我得到的是:

some content
<form>
    element
</form>

所以有人能告诉我,基于我上面的内容,为什么我得到我的"一些内容"在表单标签之外,即使我已经响应了打开表单标签?

即使我不回显开始表单标记,"某些内容"仍然出现在开始表单标记的外面。

echo立即执行输出,例如

function bar() {
   echo 'bar';
}
bar();
echo 'foo';

给出barfoo作为输出。但是如果你有

function bar() {
    return 'bar';
}
$baz = bar();
echo 'foo';
echo $baz;

你会得到foobar

Return将简单地返回变量而不回显它,而as echo将在调用它时将其回显出来。如果你返回一个变量然后回显一些东西。因此,在函数create_form()中,不是echo "some content";,而是$this->_html .= "some content";