0

我有一系列功能,最终会创建一个表单。它们位于一个类中,例如以下示例:

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>

那么有人可以根据我上面的内容告诉我,为什么即使我已经回显了开始表单标签,我的“一些内容”也会在表单标签之外回显?

即使我不回显开头的表单标签,“一些内容”仍然出现在开头的表单标签之外。

4

2 回答 2

3

echo 立即执行输出,例如

function bar() {
   echo 'bar';
}

bar();
echo 'foo';

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

function bar() {
    return 'bar';
}

$baz = bar();
echo 'foo';
echo $baz;

你会得到foobar

于 2013-01-14T19:21:23.850 回答
1

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

于 2013-01-14T19:26:14.353 回答