Приложение, которое я создаю, запускается локально, но на промежуточном сервере появляются флаги:
Zend_Form_Exception: Invalid attribute "_name"; must not contain a leading underscore
Проблема связана со строкой 500 файла /library/Zend/Form/Element.php (версия Zend 1), в которой установлено:
$this->_name = $name;
При подготовке (но не локально) в конечном итоге используется магический метод __set(), который терпит неудачу, потому что Zend не позволяет устанавливать свойство, которое выглядит как приватное (из-за подчеркивания), с помощью функции, используемой в __set( ):
$this->setAttrib($key, $value);
Я пытаюсь понять, почему волшебный метод в конечном итоге используется, поскольку if -- перед строкой 500 -- я добавляю:
if (!property_exists($this, '_name')) die();
Я могу сказать, что он знает, что свойство существует. Свойство определено в том же классе, поэтому по существу:
class Zend_Form_Element implements Zend_Validate_Interface {
protected $_name;
public function __construct($spec, $options = null) {
$this->setName($spec);
}
public function setName($name) {
$this->_name = $name;
}
public function __set($key, $value) {
$this->setAttrib($key, $value);
}
}
По какой причине может использоваться магический метод, а не просто установка _name
обычным способом?