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