0

这个问题建立在我问过的上一个问题的基础上,这个问题本质上是相似的。这个问题是一个两部分的问题,关于 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>

你会如何解决这个问题?

我所知道的是,return 返回一个值以供进一步处理,这意味着如果要显示该值,则必须回显返回该值的函数,而 echo 将立即转义处理并回显该值。

我的问题是,我试图将它们一起使用,以创建一个表单。

4

2 回答 2

1

调用 create_form 然后回显该类。

$form = new Form
$form->create_form();
echo $form;

或添加return $this->_html;到 create_form() 并且您现有的代码将起作用。

于 2013-02-14T19:36:28.723 回答
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();
于 2013-02-14T19:38:15.633 回答