0

この質問は、性質が似ている以前の質問に基づいています。この質問は、次のクラスに基づいて、html を画面に出力する方法に関する 2 つの部分からなる質問です。

その質問への回答に基づいて、次のように作成しました。

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>

どうしてこれなの?どうすれば修正できますか?

この質問の 2 番目の部分は、私は関数を持っているということです。隠しフィールドをフォームにエコーするこの関数の出力を変更することはできません。問題は、私が行う場合です:

    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>

この問題をどのように解決しますか?

つまり、その値を表示したい場合は、値を返す関数をエコーアウトする必要がありますが、エコーは処理をすぐにエスケープし、値をエコーアウトします。

私の問題は、それらを一緒に使用してフォームを作成しようとしていることです。

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 に答える