0

そこで、html要素を作成するために拡張した基本クラスを作成しました。Zend に基づいていますが、正確ではありません。いいえ、これは zend について、または zend に関連する質問ではありません

class AisisCore_Form_Elements_Input extends AisisCore_Form_Element {

    protected $_html = '';

    public function init(){

        foreach($this->_options as $options){
            $this->_html .= '<input type="text" ';

            if(isset($options['id'])){
                $this->_html .= 'id="'.$options['id'].'" ';
            }

            if(isset($options['class'])){
                $this->_html .= 'class="'.$options['class'].'" ';
            }

            if(isset($options['attributes'])){
                foreach($options['attributes'] as $attrib){
                    $this->_html .= $attrib;
                }
            }

            $this->_html .= $this->_disabled;
            $this->_html .= ' />';

            return  $this->_html;
        }
    }
}

したがって、このクラスは、オプションの配列を受け取るコンストラクターで構成される要素クラスを拡張し、基本的な要素は次のように設定されます。

$array_attrib = array(
    'attributes' => array(
        'placeholder' => 'Test'
    )
);

$element = new AisisCore_Form_Elements_Input($array_attrib);
echo $element;

だから問題は何ですか?

$element オブジェクトをエコーすると、オブジェクトを文字列に変換できないというエラーが表示されるため、var_dump を実行すると、次のように返されます。

object(AisisCore_Form_Elements_Input)#21 (3) {
  ["_html":protected]=>
  string(22) "<input type="text"  />"
  ["_options":protected]=>
  array(1) {
    ["attributes"]=>
    array(1) {
      ["placeholder"]=>
      string(4) "Test"
    }
  }
  ["_disabled":protected]=>
  NULL
}

誰かが何が起こっているのか説明できますか? 最後に、オブジェクトではなく文字列をエコーアウトしていることを確認しました。どうやってオブジェクトを作成できましたか?

AisisCore_Form_Element クラスを確認する必要がある場合は、このクラスがすべて要素を作成するために拡張する基本クラスであっても投稿します。必要なのはオプションの配列だけです。

4

2 に答える 2

1

文字列ではなく、インスタンスをエコーし​​ようとしています。あなたもそれをvar_dumpedし、これがオブジェクトであることを明確に見ました..文字列ではありません。

インスタンスを文字列として使用できるようにする場合は、クラス内に __toString メソッドを実装する必要があります。

メソッド __toString は文字列を返さなければならないことに注意してください。

幸運を。

于 2012-12-03T16:42:11.613 に答える
0

おそらくこのようなことを望んでいたときに、コンストラクターが値を返そうとしているように見えます (for ループの途中でも)。

class AisisCore_Form_Elements_Input extends AisisCore_Form_Element {

    protected $_html = '';

    public function init(){

        foreach($this->_options as $options){
            $this->_html .= '<input type="text" ';

            if(isset($options['id'])){
                $this->_html .= 'id="'.$options['id'].'" ';
            }

            if(isset($options['class'])){
                $this->_html .= 'class="'.$options['class'].'" ';
            }

            if(isset($options['attributes'])){
                foreach($options['attributes'] as $attrib){
                    $this->_html .= $attrib;
                }
            }

            $this->_html .= $this->_disabled;
            $this->_html .= ' />';

            // Constructors Don't Return Values - this is wrong
            //return  $this->_html;
        }
    }

    // provide a getter for the HTML
    public function getHtml()
    {
         return $this->_html;
    }
}

これで、例を次のように更新できます...

$element = new AisisCore_Form_Elements_Input($array_attrib);
echo $element->getHtml();
于 2012-12-03T16:51:15.203 に答える