Php 为什么这个构造函数会导致输出为空?
电话:Php 为什么这个构造函数会导致输出为空?,php,zend-framework,Php,Zend Framework,电话: class Application_Form_ImageUpload extends Zend_Form { protected $user_id; function __construct($id){ $this->user_id = $id; } public function init() { $user_path = '/var/www/upload/' . $this->user_i
class Application_Form_ImageUpload extends Zend_Form
{
protected $user_id;
function __construct($id){
$this->user_id = $id;
}
public function init()
{
$user_path = '/var/www/upload/' . $this->user_id;
...
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Upload');
$this->addElement($element, 'image');
$this->addElement($submit, 'submit');
}
}
添加构造函数后,表单的输出将变为空白。为什么会这样?因为您已经重写了调用init的默认ZF构造函数
$email = Zend_Auth::getInstance()->getIdentity();
$user_id = $mapper->getUserId($email);
$uploadForm = new Application_Form_UserImageUpload($user_id);
您可以通过在自己的中调用来解决此问题:
/**
* Constructor
*
* Registers form view helper as decorator
*
* @param mixed $options
* @return void
*/
public function __construct($options = null)
{
if (is_array($options)) {
$this->setOptions($options);
} elseif ($options instanceof Zend_Config) {
$this->setConfig($options);
}
// Extensions...
$this->init();
$this->loadDefaultDecorators();
}
或者,如果您想要更通用的解决方案,Zend_Form
默认构造函数调用其setOptions
方法,该方法使用魔术方法设置属性,因此如果您在表单类中编写setter,将使用选项值调用它。例如:
function __construct($id){
$this->user_id = $id;
parent::__construct();
}
哦,我明白了!父级的构造函数!我早该知道的!下次我会更清楚的,谢谢!
// in your class
class My_Form extends Zend_Form {
protected $_uid;
public function setUid($uid) {
$this->_uid = $uid;
}
public function getUid() {
return $this->_uid;
}
}
// build the form
$form = new My_Form(array('uid' => 123)); // this calls setUid automagically
echo $form->getUid(); // outputs 123