Странное место в коде PEAR::Quickform

wrapper

Guest
Странное место в коде PEAR::Quickform

Вот копался в PEAR::QuickForm (QuickForm.php, v 1.139) и нашел странную штуку. У этого класса есть метод addElement(...) который используется так:

PHP:
$form = new HTML_QuickForm('form', 'POST');
$form->addElement('header', '', 'Информация о статье');	
$form->addElement('hidden', 'id');			
$form->addElement('text', 'name', 'Название', 'size="50"');		
$form->addElement('date', 'date', 'Дата');
т.е. мы передаем три аргумента. но в классе эта функция описана как принимающая один аргумент (строка 560):

PHP:
/**
     * Adds an element into the form
     * 
     * If $element is a string representing element type, then this 
     * method accepts variable number of parameters, their meaning 
     * and count depending on $element
     *
     * @param    mixed      $element        element object or type of element to add (text, textarea, file...)
     * @since    1.0
     * @return   object     reference to element
     * @access   public
     * @throws   HTML_QuickForm_Error
     */
    function &addElement($element)
    {
     ...
     }
а самом класе метод вообще вызывается с немеряным кол-вом аргументов (строка 615):
PHP:
return $this->addElement('group', $name, $groupLabel, $elements, $separator, $appendName);
вопрос: как такое может быть?
 

wrapper

Guest
да посмотрел, конечно
все дело в функции: func_get_args()
получается что функции можно передавать сколько угодно аргументов... так вот

-~{}~ 27.06.04 12:37:

может это и очень полезно, но ясности коду точно не добавляет
 

Фанат

oncle terrible
Команда форума
ты не поверишь, но этот класс написан именно для полезности, а не для ясности.
Если ты знаешь способ передавать в функцию наборы параметров для САМЫХ разных элементов форм - будь добр - поделись с нами?

и еще.
есть мнение, что ясность - понятие относительное.
и зависит не от кода, а от того, кто его читает.
 

wrapper

Guest
Автор оригинала: Фанат
ты не поверишь, но этот класс написан именно для полезности, а не для ясности.
я не говорил что класс не полезный, очень даже наоборот.
лично мне не хватает только елемента типа richedit (js редактор).

Если ты знаешь способ передавать в функцию наборы параметров для САМЫХ разных элементов форм - будь добр - поделись с нами?
а чем плохо передавать ассоциативный массив?

и еще.
есть мнение, что ясность - понятие относительное.
и зависит не от кода, а от того, кто его читает.
есть мнение что и от того кто пишет также
 

Фанат

oncle terrible
Команда форума
плохо тем, что его надо сначала определять - т.е. писать совершенно лишний код.
 

Макс

Старожил PHPClub
а чем плохо передавать ассоциативный массив?
класс прежде всего ориентирован на пользователя, а не на разработчика.
Пользователю проще написать :
PHP:
$form->addElement('text', 'name', 'Название', 'size="50"');
чем
PHP:
$form->addElement(array(
                  'type'=>'text', 
                  'name'=>'name', 
                  'title'=>'Название', 
                  'attributes'=>'size="50"'));

PS
не понимаю, чем может быть нечитабельным данный код :
PHP:
        if (is_object($element) && is_subclass_of($element, 'html_quickform_element')) {
           $elementObject = &$element;
           $elementObject->onQuickFormEvent('updateValue', null, $this);
        } else {
            $args = func_get_args();
            $elementObject =& $this->_loadElement('addElement', $element, array_slice($args, 1));
            if (PEAR::isError($elementObject)) {
                return $elementObject;
            }
        }
правда я pear-исходники уже 3 года читаю :)
 
Сверху