public function attr()
    {
        $node  = $this->node;
        if (!($node instanceof Element)) {
            return $this;
        }
        
        $count = func_num_args();
        if (!$count) {
            return $this;
        }
        
        $args  = func_get_args();
        $first = $args[0];
        if (($first instanceof ArrayMap) || is_array($first)) {
            $node->setAttributes($first);
        } else {
            $second = (1 < $count) ? $args[1] : null;
            $node->setAttribute($first, $second);
        }
        return $this;
    }
public function attr()
    {
        $node  = $this->node;
        if (!($node instanceof Element)) {
            return $this;
        }
        
        $count = func_num_args();
        if (!$count) {
            return $this;
        }
        
        $args  = func_get_args();
        $first = $args[0];
        if (($first instanceof ArrayMap) || is_array($first)) {
            $node->setAttributes($first);
        } else {
            $second = (1 < $count) ? $args[1] : null;
            $node->setAttribute($first, $second);
        }
        return $this;
    }
{@link Element::setAttribute()}
および
{@link Element::setAttributes()}
の糖衣構文です.
引数が配列の場合は setAttributes() を実行し,
引数が 1 つ以上の文字列の場合は setAttribute() を実行します.
もしもこのオブジェクトがラップしているノードが Element ではなかった場合,
このメソッドは何も行いません.

jQuery のようなメソッドチェインを実現するため, このオブジェクト自身を返します.

@param  string|array|ArrayMap $var セットする属性
@return HelperObject               このオブジェクト自身