我有一系列的函数,假设,在最后创建一个表单。它们驻留在类中,如以下示例:
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";