这个问题建立在previous question I asked which is similar in nature的基础上这个问题是一个关于html输出到屏幕的方式的两个问题,基于下面的课程。
根据该问题的答案,我创建了以下内容:
class Form{
protected $_html = '';
public function __construct(){
$this->init();
}
public function init(){
}
public function open_form(){
$this->_html .= '<form>';
}
public function elements(){
$this->_html .= 'element';
}
public function close_form(){
$this->_html .= '</form>';
}
public function create_form(){
$this->open_form();
$this->elements();
$this->close_form();
}
public function __toString(){
return $this->_html;
}
}
这个课程的问题是,如果我这样做:
$form = new Form
echo $form->create_form();
然后没有打印出来。如果我更改create_form以执行以下操作:
public function create_form(){
$this->open_form();
$this->elements();
$this->close_form();
echo $this->_html;
}
然后它有效,我看到了:
<form>elements</form>
这是为什么?我该如何解决?
这个问题的第二部分是我有一个功能,并且我不能将隐藏隐藏字段的功能更改为表单。问题是如果我这样做:
public function create_form(){
$this->open_form();
$this->elements();
function_echoes_hidden_fields();
$this->close_form();
echo $this->_html;
}
// Sample function to echo hidden fields.
public function function_echoes_hidden_fields(){
echo "hidden fields";
}
我现在看到:
"hidden fields"
<form>elements</form>
您如何解决此问题?
我所知道的是返回,返回一个值以供进一步处理,这意味着如果要显示该值,则必须回显返回值的函数,而echo将转义处理imediatly并回显该值。 / p>
我的问题是,我正在尝试一起使用它们来创建表单。
答案 0 :(得分:1)
调用create_form然后回显该类。
$form = new Form
$form->create_form();
echo $form;
或将return $this->_html;
添加到create_form(),您现有的代码就可以使用。
答案 1 :(得分:1)
将create_form
更改为
public function create_form(){
$this->open_form();
$this->elements();
$this->close_form();
return $this->_html;
}
将function_echoes_hidden_fields更改为
public function function_echoes_hidden_fields(){
$this->_html .= 'hidden fields';
}
<强>更新强> 或创建一个新类
class newFrom extends Form{
public function get_form()
{
return $this->_html;
}
public function create_form(){
$this->open_form();
$this->elements();
$this->function_echoes_hidden_fields()
$this->close_form();
return $this->_html;
}
public function function_echoes_hidden_fields(){
$this->_html .= 'hidden fields';
}
};
$form = new newFrom;
$form->create_form();
echo $form->get_form();