所以我写了一个基本类,我已经扩展为创建html元素。基于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类,我将发布它如何所有这个类都是你扩展来创建元素的基类。唯一需要的是一系列选项。
答案 0 :(得分:1)
您正在尝试回显实例,而不是字符串。 你甚至var_dumped它,并清楚地看到这是一个对象..而不是一个字符串。
如果您希望能够将实例用作字符串,则必须实现__toString 你班上的方法。
请注意,方法__toString必须返回一个字符串。
祝你好运。答案 1 :(得分: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();